home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / pine3.92 / pine / pine.h < prev    next >
C/C++ Source or Header  |  1996-03-14  |  105KB  |  2,577 lines

  1. /*----------------------------------------------------------------------
  2.   $Id: pine.h,v 4.419 1996/03/15 07:13:42 hubert Exp $
  3.  
  4.             T H E    P I N E    M A I L   S Y S T E M
  5.  
  6.    Laurence Lundblade and Mike Seibel
  7.    Networks and Distributed Computing
  8.    Computing and Communications
  9.    University of Washington
  10.    Administration Builiding, AG-44
  11.    Seattle, Washington, 98195, USA
  12.    Internet: lgl@CAC.Washington.EDU
  13.              mikes@CAC.Washington.EDU
  14.  
  15.    Please address all bugs and comments to "pine-bugs@cac.washington.edu"
  16.  
  17.  
  18.    Pine and Pico are registered trademarks of the University of Washington.
  19.    No commercial use of these trademarks may be made without prior written
  20.    permission of the University of Washington.
  21.  
  22.    Pine, Pico, and Pilot software and its included text are Copyright
  23.    1989-1996 by the University of Washington.
  24.  
  25.    The full text of our legal notices is contained in the file called
  26.    CPYRIGHT, included with this distribution.
  27.  
  28.  
  29.    USENET News reading additions in part by L Lundblade / NorthWestNet, 1993
  30.    lgl@nwnet.net
  31.  
  32.    Pine is in part based on The Elm Mail System:
  33.     ***********************************************************************
  34.     *  The Elm Mail System  -  Revision: 2.13                             *
  35.     *                                                                     *
  36.     *             Copyright (c) 1986, 1987 Dave Taylor              *
  37.     *             Copyright (c) 1988, 1989 USENET Community Trust   *
  38.     ***********************************************************************
  39.  
  40.  
  41.   ----------------------------------------------------------------------*/
  42.  
  43. /*======================================================================
  44.  
  45.      pine.h 
  46.  
  47.      Definitions here are fundamental to pine. 
  48.  
  49.     No changes should need to be made here to configure pine for one
  50.   site or another.  That is, no changes for local preferences such as
  51.   default directories and other parameters.  Changes might be needed here
  52.   for porting pine to a new machine, but we hope not.
  53.  
  54.    Includes
  55.      - Various convenience definitions and macros
  56.      - macros for debug printfs
  57.      - data structures used by Pine
  58.      - declarations of all Pine functions
  59.  
  60.   ====*/
  61.  
  62.  
  63. #ifndef _PINE_INCLUDED
  64. #define _PINE_INCLUDED
  65.  
  66. #define PINE_VERSION        "3.92"
  67. #define    PHONE_HOME_VERSION    "392"
  68. #define    PHONE_HOME_HOST        "docserver.cac.washington.edu"
  69. #define    UPDATE_FOLDER        "{pine.cac.washington.edu:144/anonymous}#news."
  70.  
  71.  
  72. #define BREAK        '\0'          /* default interrupt    */
  73. #define BACKSPACE    '\b'         /* backspace character  */
  74. #define TAB        '\t'            /* tab character        */
  75. #define RETURN        '\r'         /* carriage return char */
  76. #define LINE_FEED    '\n'         /* line feed character  */
  77. #define FORMFEED    '\f'         /* form feed (^L) char  */
  78. #define COMMA        ','        /* comma character      */
  79. #define SPACE        ' '        /* space character      */
  80. #define DOT        '.'        /* period/dot character */
  81. #define BANG        '!'        /* exclaimation mark!   */
  82. #define AT_SIGN        '@'        /* at-sign character    */
  83. #define PERCENT        '%'        /* percent sign char.   */
  84. #define COLON        ':'        /* the colon ..        */
  85. #define BACKQUOTE    '`'        /* backquote character  */
  86. #define TILDE_ESCAPE    '~'        /* escape character~    */
  87. #define ESCAPE        '\033'        /* the escape        */
  88. #define    BELL        '\007'        /* the bell        */
  89. #define LPAREN        '('
  90. #define RPAREN        ')'
  91. #define BSLASH        '\\'
  92. #define QUOTE        '"'
  93.  
  94. #if defined(DOS) || defined(OS2)
  95. #define    NEWLINE        "\r\n"        /* local EOL convention...  */
  96. #else
  97. #define    NEWLINE        "\n"        /* necessary for gf_* funcs */
  98. #endif
  99.  
  100. #ifndef TRUE
  101. #define TRUE        1
  102. #define FALSE        0
  103. #endif
  104.  
  105.  
  106. #define EXECUTE_ACCESS    01        /* These five are        */
  107. #define WRITE_ACCESS    02        /*    for the calls       */
  108. #define READ_ACCESS    04        /*       to access()       */
  109. #define ACCESS_EXISTS    00        /*           <etc>         */
  110. #define EDIT_ACCESS    06        /*  (this is r+w access)   */
  111.  
  112. #define    FM_DO_PRINT    0x01        /* flag for format_message */
  113. #define    FM_NEW_MESS    0x02        /* ditto           */
  114. #define    FM_DO_PGP    0x04        /* ditto           */
  115.  
  116. #define    RB_NORM        0x00        /* flags modifying radio_buttons */
  117. #define    RB_ONE_TRY    0x01        /* one shot answer, else default */
  118. #define    RB_FLUSH_IN    0x02        /* discard pending input     */
  119. #define    RB_NO_NEWMAIL    0x04        /* Quell new mail check         */
  120.  
  121. #define    GF_NOOP        0x01        /* flags used by generalized */
  122. #define GF_EOD        0x02        /* filters                   */
  123. #define GF_DATA        0x04        /* See filter.c for more     */
  124. #define GF_ERROR    0x08        /* details                   */
  125. #define GF_RESET    0x10
  126.  
  127.  
  128. /*
  129.  * Size of generic filter's input/output queue
  130.  */
  131. #define    GF_MAXBUF        256
  132.  
  133.  
  134. #define KEY_HELP_LEN   (2 * MAX_SCREEN_COLS)
  135.                           /*When saving escape sequences, etc length of string
  136.                                 for the usual key menu at the bottom. used with
  137.                                 begin_output_store(), end_output_store() */
  138.  
  139.  
  140. #undef  min
  141. #define min(a,b)    ((a) < (b) ? (a) : (b))
  142. #undef  max
  143. #define max(a,b)    ((a) > (b) ? (a) : (b))
  144. #define ctrl(c)            ((c) & 0x1f)    /* control character mapping */
  145. #define plural(n)    ((n) == 1 ? "" : "s")
  146.  
  147. /*
  148.  * Macro to simplify clearing body portion of pine's display
  149.  */
  150. #define ClearBody()    ClearLines(1, ps_global->ttyo->screen_rows           \
  151.                           - FOOTER_ROWS(ps_global) - 1)
  152.  
  153. /*
  154.  * Macros to support anything you'd ever want to do with a message
  155.  * number...
  156.  */
  157. #define    mn_init(P, m)        msgno_init((P), (m))
  158.  
  159. #define    mn_get_cur(p)        (((p) && (p)->select)                   \
  160.                   ? (p)->select[(p)->sel_cur] : -1)
  161.  
  162. #define    mn_set_cur(p, m)    {                          \
  163.                   if(p){                      \
  164.                     (p)->select[(p)->sel_cur] = (m);          \
  165.                   }                          \
  166.                 }
  167.  
  168. #define    mn_inc_cur(s, p)    msgno_inc(s, p)
  169.  
  170. #define    mn_dec_cur(s, p)    msgno_dec(s, p)
  171.  
  172. #define    mn_add_cur(p, m)    {                          \
  173.                   if(p){                      \
  174.                       if((p)->sel_cnt+1L > (p)->sel_size){    \
  175.                       (p)->sel_size += 10L;              \
  176.                       fs_resize((void **)&((p)->select),  \
  177.                             (size_t)(p)->sel_size     \
  178.                                      * sizeof(long)); \
  179.                       }                          \
  180.                       (p)->select[((p)->sel_cnt)++] = (m);    \
  181.                   }                          \
  182.                 }
  183.  
  184. #define    mn_total_cur(p)        ((p) ? (p)->sel_cnt : 0L)
  185.  
  186. #define    mn_first_cur(p)        (((p) && (p)->sel_cnt > 0L)              \
  187.                   ? (p)->select[(p)->sel_cur = 0] : 0L)
  188.  
  189. #define    mn_next_cur(p)        (((p) && ((p)->sel_cur + 1) < (p)->sel_cnt)   \
  190.                   ? (p)->select[++((p)->sel_cur)] : -1L)
  191.  
  192. #define    mn_is_cur(p, m)        msgno_in_select((p), (m))
  193.  
  194. #define    mn_reset_cur(p, m)    {                          \
  195.                   if(p){                      \
  196.                       (p)->sel_cur  = 0L;              \
  197.                       (p)->sel_cnt  = 1L;              \
  198.                       (p)->sel_size = 8L;              \
  199.                       fs_resize((void **)&((p)->select),      \
  200.                     (size_t)(p)->sel_size * sizeof(long));\
  201.                       (p)->select[0] = (m);              \
  202.                   }                          \
  203.                     }
  204.  
  205. #define    mn_m2raw(p, m)        (((p) && (p)->sort && (m) > 0               \
  206.                   && (m) <= mn_get_total(p))               \
  207.                    ? (p)->sort[m] : 0L)
  208.  
  209. #define    mn_raw2m(p, m)        msgno_in_sort((p), (m))
  210.  
  211. #define    mn_get_total(p)        ((p) ? (p)->max_msgno : 0L)
  212.  
  213. #define    mn_set_total(p, m)    {                          \
  214.                   if(p)                          \
  215.                     (p)->max_msgno = (m);              \
  216.                     }
  217.  
  218. #define    mn_add_raw(p, m)    msgno_add_raw((p), (m))
  219.  
  220. #define    mn_flush_raw(p, m)    msgno_flush_raw((p), (m))
  221.  
  222. #define    mn_get_sort(p)        ((p) ? (p)->sort_order : SortArrival)
  223.  
  224. #define    mn_set_sort(p, t)    {                          \
  225.                   if(p)                          \
  226.                     (p)->sort_order = (t);              \
  227.                 }
  228.  
  229. #define    mn_get_revsort(p)    ((p) ? (p)->reverse_sort : 0)
  230.  
  231. #define    mn_set_revsort(p, t)    {                          \
  232.                   if(p)                          \
  233.                     (p)->reverse_sort = (t);              \
  234.                 }
  235.  
  236. #define    mn_give(P)        {                          \
  237.                   if(P){                      \
  238.                       if((*(P))->sort)                  \
  239.                     fs_give((void **)&((*(P))->sort));    \
  240.                       if((*(P))->select)              \
  241.                     fs_give((void **)&((*(P))->select));  \
  242.                       fs_give((void **)(P));              \
  243.                   }                          \
  244.                 }
  245.  
  246. /*
  247.  * This searchs for lines beginning with From<space> so that we can QP-encode
  248.  * them.  It also searches for lines consisting of only a dot.  Some mailers
  249.  * will mangle these lines.  The reason it is ifdef'd is because most people
  250.  * seem to prefer the >From style escape provided by a lot of mail software
  251.  * to the QP-encoding.
  252.  * Froms, dots, bmap, and dmap may be any integer type.  C is the next char.
  253.  * bmap and dmap should be initialized to 1.
  254.  * froms is incremented by 1 whenever a line beginning From_ is found.
  255.  * dots is incremented by 1 whenever a line with only a dot is found.
  256.  */
  257. #define Find_Froms(froms,dots,bmap,dmap,c) { int x,y;            \
  258.                 switch (c) {                \
  259.                   case '\n': case '\r':            \
  260.                     x = 0x1;                \
  261.                     y = 0x7;                \
  262.                     bmap = 0;                \
  263.                     break;                \
  264.                   case 'F':                \
  265.                     x = 0x3;                \
  266.                     y = 0;                \
  267.                     break;                \
  268.                   case 'r':                \
  269.                     x = 0x7;                \
  270.                     y = 0;                \
  271.                     break;                \
  272.                   case 'o':                \
  273.                     x = 0xf;                \
  274.                     y = 0;                \
  275.                     break;                \
  276.                   case 'm':                \
  277.                     x = 0x1f;                \
  278.                     y = 0;                \
  279.                     break;                \
  280.                   case ' ':                \
  281.                     x = 0x3f;                \
  282.                     y = 0;                \
  283.                     break;                \
  284.                   case '.':                \
  285.                     x = 0;                \
  286.                     y = 0x3;                \
  287.                     break;                \
  288.                   default:                \
  289.                     x = 0;                \
  290.                     y = 0;                \
  291.                     break;                \
  292.                 }                    \
  293.                 bmap = ((x >> 1) == bmap) ? x : 0;    \
  294.                 froms += (bmap == 0x3f ? 1 : 0);    \
  295.                 if(y == 0x7 && dmap != 0x3){        \
  296.                     y = 0x1;                \
  297.                     dmap = 0;                \
  298.                 }                    \
  299.                 dmap = ((y >> 1) == dmap) ? y : 0;    \
  300.                 dots += (dmap == 0x7 ? 1 : 0);        \
  301.                  }
  302.  
  303. /*
  304.  * Useful macro to test if current folder is a bboard type (meaning
  305.  * netnews for now) collection...
  306.  */
  307. #define    IS_NEWS(S)    (ps_global->nr_mode                     \
  308.              || ((S) && (S)->mailbox && (S)->mailbox[0] == '*'))
  309.  
  310. #define    READONLY_FOLDER  (ps_global->mail_stream                  \
  311.               && ((ps_global->mail_stream->rdonly             \
  312.                    && !IS_NEWS(ps_global->mail_stream))         \
  313.                   || ps_global->mail_stream->anonymous))
  314.  
  315. /*
  316.  * Simple, handy macro to determine if folder name is remote 
  317.  * (on an imap server)
  318.  */
  319. #define    IS_REMOTE(X)    (*(X) == '{' && *((X) + 1) && *((X) + 1) != '}' \
  320.              && strchr(((X) + 2), '}'))
  321.  
  322.  
  323. /*
  324.  * Macro used to fetch all flags.  Used when counting deleted messages
  325.  * and finding next message with a particular flag set.  The idea is to
  326.  * minimize the number of times we have to fetch all of the flags for all
  327.  * messages in the folder.
  328.  */
  329. #define    FETCH_ALL_FLAGS(s) {long i;                          \
  330.                 if(s == ps_global->mail_stream){              \
  331.                 i = max(ps_global->last_msgno_flagged,1L);    \
  332.                 ps_global->last_msgno_flagged = s->nmsgs;     \
  333.                 }                              \
  334.                 else                          \
  335.                   i = 1L;                          \
  336.                                           \
  337.                 if(i < s->nmsgs){                      \
  338.                 char         sequence[16];              \
  339.                                           \
  340.                 sprintf(sequence,"%ld:%ld", i, s->nmsgs);     \
  341.                 mail_fetchflags(s, sequence);              \
  342.                 }                              \
  343.                }
  344.  
  345.  
  346. /*======================================================================
  347.         Key code definitions
  348.   ===*/
  349. #define PF1           0x0100
  350. #define PF2           0x0101
  351. #define PF3           0x0102
  352. #define PF4           0x0103
  353. #define PF5           0x0104
  354. #define PF6           0x0105
  355. #define PF7           0x0106
  356. #define PF8           0x0107
  357. #define PF9           0x0108
  358. #define PF10          0x0109
  359. #define PF11          0x010A
  360. #define PF12          0x010B
  361.       
  362. #define OPF1          0x0110
  363. #define OPF2          0x0111
  364. #define OPF3          0x0112
  365. #define OPF4          0x0113
  366. #define OPF5          0x0114
  367. #define OPF6          0x0115
  368. #define OPF7          0x0116
  369. #define OPF8          0x0117
  370. #define OPF9          0x0118
  371. #define OPF10         0x0119
  372. #define OPF11         0x011A
  373. #define OPF12         0x011B
  374.  
  375. #define OOPF1          0x0120
  376. #define OOPF2          0x0121
  377. #define OOPF3          0x0122
  378. #define OOPF4          0x0123
  379. #define OOPF5          0x0124
  380. #define OOPF6          0x0125
  381. #define OOPF7          0x0126
  382. #define OOPF8          0x0127
  383. #define OOPF9          0x0128
  384. #define OOPF10         0x0129
  385. #define OOPF11         0x012A
  386. #define OOPF12         0x012B
  387.  
  388. #define OOOPF1         0x0130
  389. #define OOOPF2         0x0131
  390. #define OOOPF3         0x0132
  391. #define OOOPF4         0x0133
  392. #define OOOPF5         0x0134
  393. #define OOOPF6         0x0135
  394. #define OOOPF7         0x0136
  395. #define OOOPF8         0x0137
  396. #define OOOPF9         0x0138
  397. #define OOOPF10        0x0139
  398. #define OOOPF11        0x013A
  399. #define OOOPF12        0x013B
  400.  
  401. #define PF2OPF(x)      (x + 0x10)
  402. #define PF2OOPF(x)     (x + 0x20)
  403. #define PF2OOOPF(x)    (x + 0x30)
  404.  
  405.  
  406. /*-- some control codes for arrow keys.. see read_char */
  407. #define KEY_UP        0x0140
  408. #define KEY_DOWN    0x0141
  409. #define KEY_RIGHT    0x0142
  410. #define KEY_LEFT    0x0143
  411. #define KEY_JUNK    0x0144
  412. #define KEY_RESIZE    0x0145  /* Fake key to cause resize */
  413. #define    KEY_HOME    0x0146  /* Extras that aren't used outside DOS */
  414. #define    KEY_END        0x0147
  415. #define    KEY_PGUP    0x0148
  416. #define    KEY_PGDN    0x0149
  417. #define    KEY_DEL        0x014A
  418. #define    KEY_MOUSE    0x014B  /* Fake key to indicate mouse event. */
  419. #define KEY_SCRLTO    0x014C
  420. #define KEY_SCRLUPL    0x014D
  421. #define KEY_SCRLDNL    0x014E
  422. #define KEY_SWALLOW_Z    0x014F
  423. #define KEY_SWAL_UP    0x0150
  424. #define KEY_SWAL_LEFT    0x0151
  425. #define KEY_SWAL_RIGHT    0x0152
  426. #define KEY_SWAL_DOWN    0x0153
  427. #define KEY_DOUBLE_ESC    0x0154
  428. #define KEY_KERMIT    0x0155
  429. #define KEY_XTERM_MOUSE    0x0156
  430.  
  431. #define NO_OP_COMMAND    '\0'    /* no-op for short timeouts   */
  432. #define NO_OP_IDLE    0x200   /* no-op for timeouts > 25 seconds  */
  433. #define READY_TO_READ    0x201
  434.  
  435. /*
  436.  * Macro to help with new mail check timing...
  437.  */
  438. #define    NM_TIMING(X)  (((X)==NO_OP_IDLE) ? 0 : ((X)==NO_OP_COMMAND) ? 1 : 2)
  439.  
  440.  
  441. /*
  442.  * The array is initialized in init.c so the order of that initialization
  443.  * must correspond to the order of the values here.  The order is
  444.  * significant in that it determines the order that the variables
  445.  * are written into the pinerc file.
  446.  */
  447. #define V_PERSONAL_NAME            0
  448. #define V_USER_ID                  1
  449. #define V_USER_DOMAIN              2
  450. #define V_SMTP_SERVER              3
  451. #define V_NNTP_SERVER              4
  452. #define V_INBOX_PATH               5
  453. #define V_INCOMING_FOLDERS         6
  454. #define V_FOLDER_SPEC              7
  455. #define V_NEWS_SPEC                8
  456. #define    V_ARCHIVED_FOLDERS       9
  457. #define    V_PRUNED_FOLDERS       10
  458. #define V_DEFAULT_FCC              11
  459. #define V_DEFAULT_SAVE_FOLDER      12
  460. #define V_POSTPONED_FOLDER         13
  461. #define V_MAIL_DIRECTORY           14
  462. #define V_READ_MESSAGE_FOLDER      15
  463. #define V_SIGNATURE_FILE           16
  464. #define V_GLOB_ADDRBOOK            17
  465. #define V_ADDRESSBOOK              18
  466. #define V_FEATURE_LIST             19
  467. #define V_INIT_CMD_LIST            20
  468. #define V_COMP_HDRS                21
  469. #define V_CUSTOM_HDRS              22
  470. #define V_VIEW_HEADERS             23
  471. #define V_SAVED_MSG_NAME_RULE      24
  472. #define V_FCC_RULE                 25
  473. #define V_SORT_KEY                 26
  474. #define V_AB_SORT_RULE             27
  475. #define    V_GOTO_DEFAULT_RULE       28
  476. #define V_CHAR_SET                 29
  477. #define V_EDITOR                   30
  478. #define V_SPELLER                  31
  479. #define V_FILLCOL                  32
  480. #define V_REPLY_STRING             33
  481. #define V_IMAGE_VIEWER             34
  482. #define V_USE_ONLY_DOMAIN_NAME     35
  483. #define V_PRINTER                  36
  484. #define V_PERSONAL_PRINT_COMMAND   37
  485. #define V_PERSONAL_PRINT_CATEGORY  38
  486. #define V_STANDARD_PRINTER         39
  487. #define V_LAST_TIME_PRUNE_QUESTION 40
  488. #define V_LAST_VERS_USED           41
  489. #define V_BUGS_FULLNAME            42
  490. #define V_BUGS_ADDRESS             43
  491. #define V_BUGS_EXTRAS              44
  492. #define V_SUGGEST_FULLNAME         45
  493. #define V_SUGGEST_ADDRESS          46
  494. #define V_LOCAL_FULLNAME           47
  495. #define V_LOCAL_ADDRESS            48
  496. #define V_FORCED_ABOOK_ENTRY       49
  497. #define V_KBLOCK_PASSWD_COUNT      50
  498. #define    V_SENDMAIL_PATH           51
  499. #define    V_OPER_DIR           52
  500. #define    V_DISPLAY_FILTERS       53
  501. #define    V_SEND_FILTER           54
  502. #define    V_ALT_ADDRS           55
  503. #define    V_ABOOK_FORMATS           56
  504. #define    V_INDEX_FORMAT           57
  505. #define    V_OVERLAP           58
  506. #define V_STATUS_MSG_DELAY       59
  507. #define    V_MAILCHECK           60
  508. #define    V_NEWSRC_PATH           61
  509. #define    V_NEWS_ACTIVE_PATH       62
  510. #define    V_NEWS_SPOOL_DIR       63
  511. #define    V_UPLOAD_CMD           64
  512. #define    V_UPLOAD_CMD_PREFIX       65
  513. #define    V_DOWNLOAD_CMD           66
  514. #define    V_DOWNLOAD_CMD_PREFIX       67
  515. #define    V_MAILCAP_PATH           68
  516. #define    V_MIMETYPE_PATH           69
  517. #define    V_TCPOPENTIMEO           70
  518. #define    V_RSHOPENTIMEO           71
  519.  
  520. #ifdef    NEWBB
  521. #define V_NNTP_NEW_GROUP_TIME      72
  522. #define    V_LAST_REGULAR_VAR       72
  523. #else
  524. #define    V_LAST_REGULAR_VAR       71
  525. #endif
  526. #define V_ELM_STYLE_SAVE           (V_LAST_REGULAR_VAR + 1)  /* obsolete */
  527. #define V_HEADER_IN_REPLY          (V_LAST_REGULAR_VAR + 2)  /* obsolete */
  528. #define V_FEATURE_LEVEL            (V_LAST_REGULAR_VAR + 3)  /* obsolete */
  529. #define V_OLD_STYLE_REPLY          (V_LAST_REGULAR_VAR + 4)  /* obsolete */
  530. #define V_COMPOSE_MIME             (V_LAST_REGULAR_VAR + 5)  /* obsolete */
  531. #define V_SHOW_ALL_CHARACTERS      (V_LAST_REGULAR_VAR + 6)  /* obsolete */
  532. #define V_SAVE_BY_SENDER           (V_LAST_REGULAR_VAR + 7)  /* obsolete */
  533. #if defined(DOS) || defined(OS2)
  534. #define V_FOLDER_EXTENSION         (V_LAST_REGULAR_VAR + 8)
  535. #define V_NORM_FORE_COLOR          (V_LAST_REGULAR_VAR + 9)
  536. #define V_NORM_BACK_COLOR          (V_LAST_REGULAR_VAR + 10)
  537. #define V_REV_FORE_COLOR           (V_LAST_REGULAR_VAR + 11)
  538. #define V_REV_BACK_COLOR           (V_LAST_REGULAR_VAR + 12)
  539. #ifdef    _WINDOWS
  540. #define V_FONT_NAME           (V_LAST_REGULAR_VAR + 13)
  541. #define V_FONT_SIZE           (V_LAST_REGULAR_VAR + 14)
  542. #define V_FONT_STYLE           (V_LAST_REGULAR_VAR + 15)
  543. #define V_PRINT_FONT_NAME       (V_LAST_REGULAR_VAR + 16)
  544. #define V_PRINT_FONT_SIZE       (V_LAST_REGULAR_VAR + 17)
  545. #define V_PRINT_FONT_STYLE       (V_LAST_REGULAR_VAR + 18)
  546. #define V_WINDOW_POSITION       (V_LAST_REGULAR_VAR + 19)
  547. #define    V_LAST_VAR           (V_LAST_REGULAR_VAR + 19)
  548. #else   /* !_WINDOWS */
  549. #define    V_LAST_VAR           (V_LAST_REGULAR_VAR + 12)
  550. #endif  /* _WINDOWS */
  551. #else   /* !DOS */
  552. #define    V_LAST_VAR           (V_LAST_REGULAR_VAR + 7)
  553. #endif  /* DOS */
  554.  
  555.  
  556. #define VAR_PERSONAL_NAME         vars[V_PERSONAL_NAME].current_val.p
  557. #define USR_PERSONAL_NAME         vars[V_PERSONAL_NAME].user_val.p
  558. #define GLO_PERSONAL_NAME         vars[V_PERSONAL_NAME].global_val.p
  559. #define FIX_PERSONAL_NAME         vars[V_PERSONAL_NAME].fixed_val.p
  560. #define COM_PERSONAL_NAME         vars[V_PERSONAL_NAME].cmdline_val.p
  561. #define VAR_USER_ID             vars[V_USER_ID].current_val.p
  562. #define USR_USER_ID             vars[V_USER_ID].user_val.p
  563. #define GLO_USER_ID             vars[V_USER_ID].global_val.p
  564. #define FIX_USER_ID             vars[V_USER_ID].fixed_val.p
  565. #define COM_USER_ID             vars[V_USER_ID].cmdline_val.p
  566. #define VAR_USER_DOMAIN             vars[V_USER_DOMAIN].current_val.p
  567. #define USR_USER_DOMAIN             vars[V_USER_DOMAIN].user_val.p
  568. #define GLO_USER_DOMAIN             vars[V_USER_DOMAIN].global_val.p
  569. #define FIX_USER_DOMAIN             vars[V_USER_DOMAIN].fixed_val.p
  570. #define COM_USER_DOMAIN             vars[V_USER_DOMAIN].cmdline_val.p
  571. #define VAR_SMTP_SERVER             vars[V_SMTP_SERVER].current_val.l
  572. #define USR_SMTP_SERVER             vars[V_SMTP_SERVER].user_val.l
  573. #define GLO_SMTP_SERVER             vars[V_SMTP_SERVER].global_val.l
  574. #define FIX_SMTP_SERVER             vars[V_SMTP_SERVER].fixed_val.l
  575. #define COM_SMTP_SERVER             vars[V_SMTP_SERVER].cmdline_val.l
  576. #define VAR_INBOX_PATH             vars[V_INBOX_PATH].current_val.p
  577. #define USR_INBOX_PATH             vars[V_INBOX_PATH].user_val.p
  578. #define GLO_INBOX_PATH             vars[V_INBOX_PATH].global_val.p
  579. #define FIX_INBOX_PATH             vars[V_INBOX_PATH].fixed_val.p
  580. #define COM_INBOX_PATH             vars[V_INBOX_PATH].cmdline_val.p
  581. #define VAR_INCOMING_FOLDERS         vars[V_INCOMING_FOLDERS].current_val.l
  582. #define USR_INCOMING_FOLDERS         vars[V_INCOMING_FOLDERS].user_val.l
  583. #define GLO_INCOMING_FOLDERS         vars[V_INCOMING_FOLDERS].global_val.l
  584. #define FIX_INCOMING_FOLDERS         vars[V_INCOMING_FOLDERS].fixed_val.l
  585. #define COM_INCOMING_FOLDERS         vars[V_INCOMING_FOLDERS].cmdline_val.l
  586. #define VAR_FOLDER_SPEC             vars[V_FOLDER_SPEC].current_val.l
  587. #define USR_FOLDER_SPEC             vars[V_FOLDER_SPEC].user_val.l
  588. #define GLO_FOLDER_SPEC             vars[V_FOLDER_SPEC].global_val.l
  589. #define FIX_FOLDER_SPEC             vars[V_FOLDER_SPEC].fixed_val.l
  590. #define COM_FOLDER_SPEC             vars[V_FOLDER_SPEC].cmdline_val.l
  591. #define VAR_NEWS_SPEC             vars[V_NEWS_SPEC].current_val.l
  592. #define USR_NEWS_SPEC             vars[V_NEWS_SPEC].user_val.l
  593. #define GLO_NEWS_SPEC             vars[V_NEWS_SPEC].global_val.l
  594. #define FIX_NEWS_SPEC             vars[V_NEWS_SPEC].fixed_val.l
  595. #define COM_NEWS_SPEC             vars[V_NEWS_SPEC].cmdline_val.l
  596. #define VAR_ARCHIVED_FOLDERS         vars[V_ARCHIVED_FOLDERS].current_val.l
  597. #define USR_ARCHIVED_FOLDERS         vars[V_ARCHIVED_FOLDERS].user_val.l
  598. #define GLO_ARCHIVED_FOLDERS         vars[V_ARCHIVED_FOLDERS].global_val.l
  599. #define FIX_ARCHIVED_FOLDERS         vars[V_ARCHIVED_FOLDERS].fixed_val.l
  600. #define COM_ARCHIVED_FOLDERS         vars[V_ARCHIVED_FOLDERS].cmdline_val.l
  601. #define VAR_PRUNED_FOLDERS         vars[V_PRUNED_FOLDERS].current_val.l
  602. #define USR_PRUNED_FOLDERS         vars[V_PRUNED_FOLDERS].user_val.l
  603. #define GLO_PRUNED_FOLDERS         vars[V_PRUNED_FOLDERS].global_val.l
  604. #define FIX_PRUNED_FOLDERS         vars[V_PRUNED_FOLDERS].fixed_val.l
  605. #define COM_PRUNED_FOLDERS         vars[V_PRUNED_FOLDERS].cmdline_val.l
  606. #define VAR_DEFAULT_FCC             vars[V_DEFAULT_FCC].current_val.p
  607. #define USR_DEFAULT_FCC             vars[V_DEFAULT_FCC].user_val.p
  608. #define GLO_DEFAULT_FCC             vars[V_DEFAULT_FCC].global_val.p
  609. #define FIX_DEFAULT_FCC             vars[V_DEFAULT_FCC].fixed_val.p
  610. #define COM_DEFAULT_FCC             vars[V_DEFAULT_FCC].cmdline_val.p
  611. #define VAR_DEFAULT_SAVE_FOLDER         vars[V_DEFAULT_SAVE_FOLDER].current_val.p
  612. #define USR_DEFAULT_SAVE_FOLDER         vars[V_DEFAULT_SAVE_FOLDER].user_val.p
  613. #define GLO_DEFAULT_SAVE_FOLDER         vars[V_DEFAULT_SAVE_FOLDER].global_val.p
  614. #define FIX_DEFAULT_SAVE_FOLDER         vars[V_DEFAULT_SAVE_FOLDER].fixed_val.p
  615. #define COM_DEFAULT_SAVE_FOLDER         vars[V_DEFAULT_SAVE_FOLDER].cmdline_val.p
  616. #define VAR_POSTPONED_FOLDER         vars[V_POSTPONED_FOLDER].current_val.p
  617. #define USR_POSTPONED_FOLDER         vars[V_POSTPONED_FOLDER].user_val.p
  618. #define GLO_POSTPONED_FOLDER         vars[V_POSTPONED_FOLDER].global_val.p
  619. #define FIX_POSTPONED_FOLDER         vars[V_POSTPONED_FOLDER].fixed_val.p
  620. #define COM_POSTPONED_FOLDER         vars[V_POSTPONED_FOLDER].cmdline_val.p
  621. #define VAR_MAIL_DIRECTORY         vars[V_MAIL_DIRECTORY].current_val.p
  622. #define USR_MAIL_DIRECTORY         vars[V_MAIL_DIRECTORY].user_val.p
  623. #define GLO_MAIL_DIRECTORY         vars[V_MAIL_DIRECTORY].global_val.p
  624. #define FIX_MAIL_DIRECTORY         vars[V_MAIL_DIRECTORY].fixed_val.p
  625. #define COM_MAIL_DIRECTORY         vars[V_MAIL_DIRECTORY].cmdline_val.p
  626. #define VAR_READ_MESSAGE_FOLDER         vars[V_READ_MESSAGE_FOLDER].current_val.p
  627. #define USR_READ_MESSAGE_FOLDER         vars[V_READ_MESSAGE_FOLDER].user_val.p
  628. #define GLO_READ_MESSAGE_FOLDER         vars[V_READ_MESSAGE_FOLDER].global_val.p
  629. #define FIX_READ_MESSAGE_FOLDER         vars[V_READ_MESSAGE_FOLDER].fixed_val.p
  630. #define COM_READ_MESSAGE_FOLDER         vars[V_READ_MESSAGE_FOLDER].cmdline_val.p
  631. #define VAR_SIGNATURE_FILE         vars[V_SIGNATURE_FILE].current_val.p
  632. #define USR_SIGNATURE_FILE         vars[V_SIGNATURE_FILE].user_val.p
  633. #define GLO_SIGNATURE_FILE         vars[V_SIGNATURE_FILE].global_val.p
  634. #define FIX_SIGNATURE_FILE         vars[V_SIGNATURE_FILE].fixed_val.p
  635. #define COM_SIGNATURE_FILE         vars[V_SIGNATURE_FILE].cmdline_val.p
  636. #define VAR_GLOB_ADDRBOOK         vars[V_GLOB_ADDRBOOK].current_val.l
  637. #define USR_GLOB_ADDRBOOK         vars[V_GLOB_ADDRBOOK].user_val.l
  638. #define GLO_GLOB_ADDRBOOK         vars[V_GLOB_ADDRBOOK].global_val.l
  639. #define FIX_GLOB_ADDRBOOK         vars[V_GLOB_ADDRBOOK].fixed_val.l
  640. #define COM_GLOB_ADDRBOOK         vars[V_GLOB_ADDRBOOK].cmdline_val.l
  641. #define VAR_ADDRESSBOOK             vars[V_ADDRESSBOOK].current_val.l
  642. #define USR_ADDRESSBOOK             vars[V_ADDRESSBOOK].user_val.l
  643. #define GLO_ADDRESSBOOK             vars[V_ADDRESSBOOK].global_val.l
  644. #define FIX_ADDRESSBOOK             vars[V_ADDRESSBOOK].fixed_val.l
  645. #define COM_ADDRESSBOOK             vars[V_ADDRESSBOOK].cmdline_val.l
  646. #define VAR_FEATURE_LIST         vars[V_FEATURE_LIST].current_val.l
  647. #define USR_FEATURE_LIST         vars[V_FEATURE_LIST].user_val.l
  648. #define GLO_FEATURE_LIST         vars[V_FEATURE_LIST].global_val.l
  649. #define FIX_FEATURE_LIST         vars[V_FEATURE_LIST].fixed_val.l
  650. #define COM_FEATURE_LIST         vars[V_FEATURE_LIST].cmdline_val.l
  651. #define VAR_INIT_CMD_LIST         vars[V_INIT_CMD_LIST].current_val.l
  652. #define USR_INIT_CMD_LIST         vars[V_INIT_CMD_LIST].user_val.l
  653. #define GLO_INIT_CMD_LIST         vars[V_INIT_CMD_LIST].global_val.l
  654. #define FIX_INIT_CMD_LIST         vars[V_INIT_CMD_LIST].fixed_val.l
  655. #define COM_INIT_CMD_LIST         vars[V_INIT_CMD_LIST].cmdline_val.l
  656. #define VAR_COMP_HDRS             vars[V_COMP_HDRS].current_val.l
  657. #define USR_COMP_HDRS             vars[V_COMP_HDRS].user_val.l
  658. #define GLO_COMP_HDRS             vars[V_COMP_HDRS].global_val.l
  659. #define FIX_COMP_HDRS             vars[V_COMP_HDRS].fixed_val.l
  660. #define COM_COMP_HDRS             vars[V_COMP_HDRS].cmdline_val.l
  661. #define VAR_CUSTOM_HDRS             vars[V_CUSTOM_HDRS].current_val.l
  662. #define USR_CUSTOM_HDRS             vars[V_CUSTOM_HDRS].user_val.l
  663. #define GLO_CUSTOM_HDRS             vars[V_CUSTOM_HDRS].global_val.l
  664. #define FIX_CUSTOM_HDRS             vars[V_CUSTOM_HDRS].fixed_val.l
  665. #define COM_CUSTOM_HDRS             vars[V_CUSTOM_HDRS].cmdline_val.l
  666. #define VAR_VIEW_HEADERS         vars[V_VIEW_HEADERS].current_val.l
  667. #define USR_VIEW_HEADERS         vars[V_VIEW_HEADERS].user_val.l
  668. #define GLO_VIEW_HEADERS         vars[V_VIEW_HEADERS].global_val.l
  669. #define FIX_VIEW_HEADERS         vars[V_VIEW_HEADERS].fixed_val.l
  670. #define COM_VIEW_HEADERS         vars[V_VIEW_HEADERS].cmdline_val.l
  671. #define VAR_SAVED_MSG_NAME_RULE         vars[V_SAVED_MSG_NAME_RULE].current_val.p
  672. #define USR_SAVED_MSG_NAME_RULE         vars[V_SAVED_MSG_NAME_RULE].user_val.p
  673. #define GLO_SAVED_MSG_NAME_RULE         vars[V_SAVED_MSG_NAME_RULE].global_val.p
  674. #define FIX_SAVED_MSG_NAME_RULE         vars[V_SAVED_MSG_NAME_RULE].fixed_val.p
  675. #define COM_SAVED_MSG_NAME_RULE         vars[V_SAVED_MSG_NAME_RULE].cmdline_val.p
  676. #define VAR_FCC_RULE             vars[V_FCC_RULE].current_val.p
  677. #define USR_FCC_RULE             vars[V_FCC_RULE].user_val.p
  678. #define GLO_FCC_RULE             vars[V_FCC_RULE].global_val.p
  679. #define FIX_FCC_RULE             vars[V_FCC_RULE].fixed_val.p
  680. #define COM_FCC_RULE             vars[V_FCC_RULE].cmdline_val.p
  681. #define VAR_SORT_KEY             vars[V_SORT_KEY].current_val.p
  682. #define USR_SORT_KEY             vars[V_SORT_KEY].user_val.p
  683. #define GLO_SORT_KEY             vars[V_SORT_KEY].global_val.p
  684. #define FIX_SORT_KEY             vars[V_SORT_KEY].fixed_val.p
  685. #define COM_SORT_KEY             vars[V_SORT_KEY].cmdline_val.p
  686. #define VAR_AB_SORT_RULE         vars[V_AB_SORT_RULE].current_val.p
  687. #define USR_AB_SORT_RULE         vars[V_AB_SORT_RULE].user_val.p
  688. #define GLO_AB_SORT_RULE         vars[V_AB_SORT_RULE].global_val.p
  689. #define FIX_AB_SORT_RULE         vars[V_AB_SORT_RULE].fixed_val.p
  690. #define COM_AB_SORT_RULE         vars[V_AB_SORT_RULE].cmdline_val.p
  691. #define VAR_CHAR_SET             vars[V_CHAR_SET].current_val.p
  692. #define USR_CHAR_SET             vars[V_CHAR_SET].user_val.p
  693. #define GLO_CHAR_SET             vars[V_CHAR_SET].global_val.p
  694. #define FIX_CHAR_SET             vars[V_CHAR_SET].fixed_val.p
  695. #define COM_CHAR_SET             vars[V_CHAR_SET].cmdline_val.p
  696. #define VAR_EDITOR             vars[V_EDITOR].current_val.p
  697. #define USR_EDITOR             vars[V_EDITOR].user_val.p
  698. #define GLO_EDITOR             vars[V_EDITOR].global_val.p
  699. #define FIX_EDITOR             vars[V_EDITOR].fixed_val.p
  700. #define COM_EDITOR             vars[V_EDITOR].cmdline_val.p
  701. #define VAR_SPELLER             vars[V_SPELLER].current_val.p
  702. #define USR_SPELLER             vars[V_SPELLER].user_val.p
  703. #define GLO_SPELLER             vars[V_SPELLER].global_val.p
  704. #define FIX_SPELLER             vars[V_SPELLER].fixed_val.p
  705. #define COM_SPELLER             vars[V_SPELLER].cmdline_val.p
  706. #define VAR_FILLCOL             vars[V_FILLCOL].current_val.p
  707. #define USR_FILLCOL             vars[V_FILLCOL].user_val.p
  708. #define GLO_FILLCOL             vars[V_FILLCOL].global_val.p
  709. #define FIX_FILLCOL             vars[V_FILLCOL].fixed_val.p
  710. #define COM_FILLCOL             vars[V_FILLCOL].cmdline_val.p
  711. #define VAR_REPLY_STRING         vars[V_REPLY_STRING].current_val.p
  712. #define USR_REPLY_STRING         vars[V_REPLY_STRING].user_val.p
  713. #define GLO_REPLY_STRING         vars[V_REPLY_STRING].global_val.p
  714. #define FIX_REPLY_STRING         vars[V_REPLY_STRING].fixed_val.p
  715. #define COM_REPLY_STRING         vars[V_REPLY_STRING].cmdline_val.p
  716. #define VAR_IMAGE_VIEWER         vars[V_IMAGE_VIEWER].current_val.p
  717. #define USR_IMAGE_VIEWER         vars[V_IMAGE_VIEWER].user_val.p
  718. #define GLO_IMAGE_VIEWER         vars[V_IMAGE_VIEWER].global_val.p
  719. #define FIX_IMAGE_VIEWER         vars[V_IMAGE_VIEWER].fixed_val.p
  720. #define COM_IMAGE_VIEWER         vars[V_IMAGE_VIEWER].cmdline_val.p
  721. #define VAR_USE_ONLY_DOMAIN_NAME     vars[V_USE_ONLY_DOMAIN_NAME].current_val.p
  722. #define USR_USE_ONLY_DOMAIN_NAME     vars[V_USE_ONLY_DOMAIN_NAME].user_val.p
  723. #define GLO_USE_ONLY_DOMAIN_NAME     vars[V_USE_ONLY_DOMAIN_NAME].global_val.p
  724. #define FIX_USE_ONLY_DOMAIN_NAME     vars[V_USE_ONLY_DOMAIN_NAME].fixed_val.p
  725. #define COM_USE_ONLY_DOMAIN_NAME     vars[V_USE_ONLY_DOMAIN_NAME].cmdline_val.p
  726. #define VAR_PRINTER             vars[V_PRINTER].current_val.p
  727. #define USR_PRINTER             vars[V_PRINTER].user_val.p
  728. #define GLO_PRINTER             vars[V_PRINTER].global_val.p
  729. #define FIX_PRINTER             vars[V_PRINTER].fixed_val.p
  730. #define COM_PRINTER             vars[V_PRINTER].cmdline_val.p
  731. #define VAR_PERSONAL_PRINT_COMMAND   vars[V_PERSONAL_PRINT_COMMAND].current_val.l
  732. #define USR_PERSONAL_PRINT_COMMAND   vars[V_PERSONAL_PRINT_COMMAND].user_val.l
  733. #define GLO_PERSONAL_PRINT_COMMAND   vars[V_PERSONAL_PRINT_COMMAND].global_val.l
  734. #define FIX_PERSONAL_PRINT_COMMAND   vars[V_PERSONAL_PRINT_COMMAND].fixed_val.l
  735. #define COM_PERSONAL_PRINT_COMMAND   vars[V_PERSONAL_PRINT_COMMAND].cmdline_val.l
  736. #define VAR_PERSONAL_PRINT_CATEGORY  vars[V_PERSONAL_PRINT_CATEGORY].current_val.p
  737. #define USR_PERSONAL_PRINT_CATEGORY  vars[V_PERSONAL_PRINT_CATEGORY].user_val.p
  738. #define GLO_PERSONAL_PRINT_CATEGORY  vars[V_PERSONAL_PRINT_CATEGORY].global_val.p
  739. #define FIX_PERSONAL_PRINT_CATEGORY  vars[V_PERSONAL_PRINT_CATEGORY].fixed_val.p
  740. #define COM_PERSONAL_PRINT_CATEGORY  vars[V_PERSONAL_PRINT_CATEGORY].cmdline_val.p
  741. #define VAR_STANDARD_PRINTER         vars[V_STANDARD_PRINTER].current_val.l
  742. #define USR_STANDARD_PRINTER         vars[V_STANDARD_PRINTER].user_val.l
  743. #define GLO_STANDARD_PRINTER         vars[V_STANDARD_PRINTER].global_val.l
  744. #define FIX_STANDARD_PRINTER         vars[V_STANDARD_PRINTER].fixed_val.l
  745. #define COM_STANDARD_PRINTER         vars[V_STANDARD_PRINTER].cmdline_val.l
  746. #define VAR_LAST_TIME_PRUNE_QUESTION vars[V_LAST_TIME_PRUNE_QUESTION].current_val.p
  747. #define USR_LAST_TIME_PRUNE_QUESTION vars[V_LAST_TIME_PRUNE_QUESTION].user_val.p
  748. #define GLO_LAST_TIME_PRUNE_QUESTION vars[V_LAST_TIME_PRUNE_QUESTION].global_val.p
  749. #define FIX_LAST_TIME_PRUNE_QUESTION vars[V_LAST_TIME_PRUNE_QUESTION].fixed_val.p
  750. #define COM_LAST_TIME_PRUNE_QUESTION vars[V_LAST_TIME_PRUNE_QUESTION].cmdline_val.p
  751. #define VAR_LAST_VERS_USED         vars[V_LAST_VERS_USED].current_val.p
  752. #define USR_LAST_VERS_USED         vars[V_LAST_VERS_USED].user_val.p
  753. #define GLO_LAST_VERS_USED         vars[V_LAST_VERS_USED].global_val.p
  754. #define FIX_LAST_VERS_USED         vars[V_LAST_VERS_USED].fixed_val.p
  755. #define COM_LAST_VERS_USED         vars[V_LAST_VERS_USED].cmdline_val.p
  756. #define VAR_BUGS_FULLNAME         vars[V_BUGS_FULLNAME].current_val.p
  757. #define USR_BUGS_FULLNAME         vars[V_BUGS_FULLNAME].user_val.p
  758. #define GLO_BUGS_FULLNAME         vars[V_BUGS_FULLNAME].global_val.p
  759. #define FIX_BUGS_FULLNAME         vars[V_BUGS_FULLNAME].fixed_val.p
  760. #define COM_BUGS_FULLNAME         vars[V_BUGS_FULLNAME].cmdline_val.p
  761. #define VAR_BUGS_ADDRESS         vars[V_BUGS_ADDRESS].current_val.p
  762. #define USR_BUGS_ADDRESS         vars[V_BUGS_ADDRESS].user_val.p
  763. #define GLO_BUGS_ADDRESS         vars[V_BUGS_ADDRESS].global_val.p
  764. #define FIX_BUGS_ADDRESS         vars[V_BUGS_ADDRESS].fixed_val.p
  765. #define COM_BUGS_ADDRESS         vars[V_BUGS_ADDRESS].cmdline_val.p
  766. #define VAR_BUGS_EXTRAS             vars[V_BUGS_EXTRAS].current_val.p
  767. #define USR_BUGS_EXTRAS             vars[V_BUGS_EXTRAS].user_val.p
  768. #define GLO_BUGS_EXTRAS             vars[V_BUGS_EXTRAS].global_val.p
  769. #define FIX_BUGS_EXTRAS             vars[V_BUGS_EXTRAS].fixed_val.p
  770. #define COM_BUGS_EXTRAS             vars[V_BUGS_EXTRAS].cmdline_val.p
  771. #define VAR_SUGGEST_FULLNAME         vars[V_SUGGEST_FULLNAME].current_val.p
  772. #define USR_SUGGEST_FULLNAME         vars[V_SUGGEST_FULLNAME].user_val.p
  773. #define GLO_SUGGEST_FULLNAME         vars[V_SUGGEST_FULLNAME].global_val.p
  774. #define FIX_SUGGEST_FULLNAME         vars[V_SUGGEST_FULLNAME].fixed_val.p
  775. #define COM_SUGGEST_FULLNAME         vars[V_SUGGEST_FULLNAME].cmdline_val.p
  776. #define VAR_SUGGEST_ADDRESS         vars[V_SUGGEST_ADDRESS].current_val.p
  777. #define USR_SUGGEST_ADDRESS         vars[V_SUGGEST_ADDRESS].user_val.p
  778. #define GLO_SUGGEST_ADDRESS         vars[V_SUGGEST_ADDRESS].global_val.p
  779. #define FIX_SUGGEST_ADDRESS         vars[V_SUGGEST_ADDRESS].fixed_val.p
  780. #define COM_SUGGEST_ADDRESS         vars[V_SUGGEST_ADDRESS].cmdline_val.p
  781. #define VAR_LOCAL_FULLNAME         vars[V_LOCAL_FULLNAME].current_val.p
  782. #define USR_LOCAL_FULLNAME         vars[V_LOCAL_FULLNAME].user_val.p
  783. #define GLO_LOCAL_FULLNAME         vars[V_LOCAL_FULLNAME].global_val.p
  784. #define FIX_LOCAL_FULLNAME         vars[V_LOCAL_FULLNAME].fixed_val.p
  785. #define COM_LOCAL_FULLNAME         vars[V_LOCAL_FULLNAME].cmdline_val.p
  786. #define VAR_LOCAL_ADDRESS         vars[V_LOCAL_ADDRESS].current_val.p
  787. #define USR_LOCAL_ADDRESS         vars[V_LOCAL_ADDRESS].user_val.p
  788. #define GLO_LOCAL_ADDRESS         vars[V_LOCAL_ADDRESS].global_val.p
  789. #define FIX_LOCAL_ADDRESS         vars[V_LOCAL_ADDRESS].fixed_val.p
  790. #define COM_LOCAL_ADDRESS         vars[V_LOCAL_ADDRESS].cmdline_val.p
  791. #define VAR_FORCED_ABOOK_ENTRY         vars[V_FORCED_ABOOK_ENTRY].current_val.l
  792. #define USR_FORCED_ABOOK_ENTRY         vars[V_FORCED_ABOOK_ENTRY].user_val.l
  793. #define GLO_FORCED_ABOOK_ENTRY         vars[V_FORCED_ABOOK_ENTRY].global_val.l
  794. #define FIX_FORCED_ABOOK_ENTRY         vars[V_FORCED_ABOOK_ENTRY].fixed_val.l
  795. #define COM_FORCED_ABOOK_ENTRY         vars[V_FORCED_ABOOK_ENTRY].cmdline_val.l
  796. #define VAR_KBLOCK_PASSWD_COUNT         vars[V_KBLOCK_PASSWD_COUNT].current_val.p
  797. #define USR_KBLOCK_PASSWD_COUNT         vars[V_KBLOCK_PASSWD_COUNT].user_val.p
  798. #define GLO_KBLOCK_PASSWD_COUNT         vars[V_KBLOCK_PASSWD_COUNT].global_val.p
  799. #define FIX_KBLOCK_PASSWD_COUNT         vars[V_KBLOCK_PASSWD_COUNT].fixed_val.p
  800. #define COM_KBLOCK_PASSWD_COUNT         vars[V_KBLOCK_PASSWD_COUNT].cmdline_val.p
  801. #define VAR_STATUS_MSG_DELAY         vars[V_STATUS_MSG_DELAY].current_val.p
  802. #define USR_STATUS_MSG_DELAY         vars[V_STATUS_MSG_DELAY].user_val.p
  803. #define GLO_STATUS_MSG_DELAY         vars[V_STATUS_MSG_DELAY].global_val.p
  804. #define FIX_STATUS_MSG_DELAY         vars[V_STATUS_MSG_DELAY].fixed_val.p
  805. #define COM_STATUS_MSG_DELAY         vars[V_STATUS_MSG_DELAY].cmdline_val.p
  806. #define VAR_SENDMAIL_PATH         vars[V_SENDMAIL_PATH].current_val.p
  807. #define USR_SENDMAIL_PATH         vars[V_SENDMAIL_PATH].user_val.p
  808. #define GLO_SENDMAIL_PATH         vars[V_SENDMAIL_PATH].global_val.p
  809. #define FIX_SENDMAIL_PATH         vars[V_SENDMAIL_PATH].fixed_val.p
  810. #define COM_SENDMAIL_PATH         vars[V_SENDMAIL_PATH].cmdline_val.p
  811. #define VAR_OPER_DIR             vars[V_OPER_DIR].current_val.p
  812. #define USR_OPER_DIR             vars[V_OPER_DIR].user_val.p
  813. #define GLO_OPER_DIR             vars[V_OPER_DIR].global_val.p
  814. #define FIX_OPER_DIR             vars[V_OPER_DIR].fixed_val.p
  815. #define COM_OPER_DIR             vars[V_OPER_DIR].cmdline_val.p
  816. #define VAR_DISPLAY_FILTERS         vars[V_DISPLAY_FILTERS].current_val.l
  817. #define USR_DISPLAY_FILTERS         vars[V_DISPLAY_FILTERS].user_val.l
  818. #define GLO_DISPLAY_FILTERS         vars[V_DISPLAY_FILTERS].global_val.l
  819. #define FIX_DISPLAY_FILTERS         vars[V_DISPLAY_FILTERS].fixed_val.l
  820. #define COM_DISPLAY_FILTERS         vars[V_DISPLAY_FILTERS].cmdline_val.l
  821. #define VAR_SEND_FILTER             vars[V_SEND_FILTER].current_val.l
  822. #define USR_SEND_FILTER             vars[V_SEND_FILTER].user_val.l
  823. #define GLO_SEND_FILTER             vars[V_SEND_FILTER].global_val.l
  824. #define FIX_SEND_FILTER             vars[V_SEND_FILTER].fixed_val.l
  825. #define COM_SEND_FILTER             vars[V_SEND_FILTER].cmdline_val.l
  826. #define VAR_ALT_ADDRS             vars[V_ALT_ADDRS].current_val.l
  827. #define USR_ALT_ADDRS             vars[V_ALT_ADDRS].user_val.l
  828. #define GLO_ALT_ADDRS             vars[V_ALT_ADDRS].global_val.l
  829. #define FIX_ALT_ADDRS             vars[V_ALT_ADDRS].fixed_val.l
  830. #define COM_ALT_ADDRS             vars[V_ALT_ADDRS].cmdline_val.l
  831. #define VAR_ABOOK_FORMATS         vars[V_ABOOK_FORMATS].current_val.l
  832. #define USR_ABOOK_FORMATS         vars[V_ABOOK_FORMATS].user_val.l
  833. #define GLO_ABOOK_FORMATS         vars[V_ABOOK_FORMATS].global_val.l
  834. #define FIX_ABOOK_FORMATS         vars[V_ABOOK_FORMATS].fixed_val.l
  835. #define COM_ABOOK_FORMATS         vars[V_ABOOK_FORMATS].cmdline_val.l
  836. #define VAR_INDEX_FORMAT         vars[V_INDEX_FORMAT].current_val.p
  837. #define USR_INDEX_FORMAT         vars[V_INDEX_FORMAT].user_val.p
  838. #define GLO_INDEX_FORMAT         vars[V_INDEX_FORMAT].global_val.p
  839. #define FIX_INDEX_FORMAT         vars[V_INDEX_FORMAT].fixed_val.p
  840. #define COM_INDEX_FORMAT         vars[V_INDEX_FORMAT].cmdline_val.p
  841. #define VAR_OVERLAP             vars[V_OVERLAP].current_val.p
  842. #define USR_OVERLAP             vars[V_OVERLAP].user_val.p
  843. #define GLO_OVERLAP             vars[V_OVERLAP].global_val.p
  844. #define FIX_OVERLAP             vars[V_OVERLAP].fixed_val.p
  845. #define COM_OVERLAP             vars[V_OVERLAP].cmdline_val.p
  846. #define VAR_MAILCHECK             vars[V_MAILCHECK].current_val.p
  847. #define USR_MAILCHECK             vars[V_MAILCHECK].user_val.p
  848. #define GLO_MAILCHECK             vars[V_MAILCHECK].global_val.p
  849. #define FIX_MAILCHECK             vars[V_MAILCHECK].fixed_val.p
  850. #define COM_MAILCHECK             vars[V_MAILCHECK].cmdline_val.p
  851. #define VAR_NEWSRC_PATH             vars[V_NEWSRC_PATH].current_val.p
  852. #define USR_NEWSRC_PATH             vars[V_NEWSRC_PATH].user_val.p
  853. #define GLO_NEWSRC_PATH             vars[V_NEWSRC_PATH].global_val.p
  854. #define FIX_NEWSRC_PATH             vars[V_NEWSRC_PATH].fixed_val.p
  855. #define COM_NEWSRC_PATH             vars[V_NEWSRC_PATH].cmdline_val.p
  856. #define VAR_NEWS_ACTIVE_PATH         vars[V_NEWS_ACTIVE_PATH].current_val.p
  857. #define USR_NEWS_ACTIVE_PATH         vars[V_NEWS_ACTIVE_PATH].user_val.p
  858. #define GLO_NEWS_ACTIVE_PATH         vars[V_NEWS_ACTIVE_PATH].global_val.p
  859. #define FIX_NEWS_ACTIVE_PATH         vars[V_NEWS_ACTIVE_PATH].fixed_val.p
  860. #define COM_NEWS_ACTIVE_PATH         vars[V_NEWS_ACTIVE_PATH].cmdline_val.p
  861. #define VAR_NEWS_SPOOL_DIR         vars[V_NEWS_SPOOL_DIR].current_val.p
  862. #define USR_NEWS_SPOOL_DIR         vars[V_NEWS_SPOOL_DIR].user_val.p
  863. #define GLO_NEWS_SPOOL_DIR         vars[V_NEWS_SPOOL_DIR].global_val.p
  864. #define FIX_NEWS_SPOOL_DIR         vars[V_NEWS_SPOOL_DIR].fixed_val.p
  865. #define COM_NEWS_SPOOL_DIR         vars[V_NEWS_SPOOL_DIR].cmdline_val.p
  866.   /* Elm style save is obsolete in Pine 3.81 (see saved msg name rule) */   
  867. #define VAR_ELM_STYLE_SAVE           vars[V_ELM_STYLE_SAVE].current_val.p
  868. #define USR_ELM_STYLE_SAVE           vars[V_ELM_STYLE_SAVE].user_val.p
  869. #define GLO_ELM_STYLE_SAVE           vars[V_ELM_STYLE_SAVE].global_val.p
  870. #define FIX_ELM_STYLE_SAVE           vars[V_ELM_STYLE_SAVE].fixed_val.p
  871. #define COM_ELM_STYLE_SAVE           vars[V_ELM_STYLE_SAVE].cmdline_val.p
  872.   /* Header in reply is obsolete in Pine 3.83 (see feature list) */   
  873. #define VAR_HEADER_IN_REPLY          vars[V_HEADER_IN_REPLY].current_val.p
  874. #define USR_HEADER_IN_REPLY          vars[V_HEADER_IN_REPLY].user_val.p
  875. #define GLO_HEADER_IN_REPLY          vars[V_HEADER_IN_REPLY].global_val.p
  876. #define FIX_HEADER_IN_REPLY          vars[V_HEADER_IN_REPLY].fixed_val.p
  877. #define COM_HEADER_IN_REPLY          vars[V_HEADER_IN_REPLY].cmdline_val.p
  878.   /* Feature level is obsolete in Pine 3.83 (see feature list) */   
  879. #define VAR_FEATURE_LEVEL            vars[V_FEATURE_LEVEL].current_val.p
  880. #define USR_FEATURE_LEVEL            vars[V_FEATURE_LEVEL].user_val.p
  881. #define GLO_FEATURE_LEVEL            vars[V_FEATURE_LEVEL].global_val.p
  882. #define FIX_FEATURE_LEVEL            vars[V_FEATURE_LEVEL].fixed_val.p
  883. #define COM_FEATURE_LEVEL            vars[V_FEATURE_LEVEL].cmdline_val.p
  884.   /* Old style reply is obsolete in Pine 3.83 (see feature list) */   
  885. #define VAR_OLD_STYLE_REPLY          vars[V_OLD_STYLE_REPLY].current_val.p
  886. #define USR_OLD_STYLE_REPLY          vars[V_OLD_STYLE_REPLY].user_val.p
  887. #define GLO_OLD_STYLE_REPLY          vars[V_OLD_STYLE_REPLY].global_val.p
  888. #define FIX_OLD_STYLE_REPLY          vars[V_OLD_STYLE_REPLY].fixed_val.p
  889. #define COM_OLD_STYLE_REPLY          vars[V_OLD_STYLE_REPLY].cmdline_val.p
  890.   /* Compose MIME is obsolete in Pine 3.81 */
  891. #define VAR_COMPOSE_MIME             vars[V_COMPOSE_MIME].current_val.p
  892. #define USR_COMPOSE_MIME             vars[V_COMPOSE_MIME].user_val.p
  893. #define GLO_COMPOSE_MIME             vars[V_COMPOSE_MIME].global_val.p
  894. #define FIX_COMPOSE_MIME             vars[V_COMPOSE_MIME].fixed_val.p
  895. #define COM_COMPOSE_MIME             vars[V_COMPOSE_MIME].cmdline_val.p
  896.   /* Show all characters is obsolete in Pine 3.83 */   
  897. #define VAR_SHOW_ALL_CHARACTERS      vars[V_SHOW_ALL_CHARACTERS].current_val.p
  898. #define USR_SHOW_ALL_CHARACTERS      vars[V_SHOW_ALL_CHARACTERS].user_val.p
  899. #define GLO_SHOW_ALL_CHARACTERS      vars[V_SHOW_ALL_CHARACTERS].global_val.p
  900. #define FIX_SHOW_ALL_CHARACTERS      vars[V_SHOW_ALL_CHARACTERS].fixed_val.p
  901. #define COM_SHOW_ALL_CHARACTERS      vars[V_SHOW_ALL_CHARACTERS].cmdline_val.p
  902.   /* Save by sender is obsolete in Pine 3.83 (see saved msg name rule) */   
  903. #define VAR_SAVE_BY_SENDER           vars[V_SAVE_BY_SENDER].current_val.p
  904. #define USR_SAVE_BY_SENDER           vars[V_SAVE_BY_SENDER].user_val.p
  905. #define GLO_SAVE_BY_SENDER           vars[V_SAVE_BY_SENDER].global_val.p
  906. #define FIX_SAVE_BY_SENDER           vars[V_SAVE_BY_SENDER].fixed_val.p
  907. #define COM_SAVE_BY_SENDER           vars[V_SAVE_BY_SENDER].cmdline_val.p
  908. #define VAR_NNTP_SERVER              vars[V_NNTP_SERVER].current_val.l
  909. #define USR_NNTP_SERVER              vars[V_NNTP_SERVER].user_val.l
  910. #define GLO_NNTP_SERVER              vars[V_NNTP_SERVER].global_val.l
  911. #define FIX_NNTP_SERVER              vars[V_NNTP_SERVER].fixed_val.l
  912. #define COM_NNTP_SERVER              vars[V_NNTP_SERVER].cmdline_val.l
  913. #define VAR_UPLOAD_CMD             vars[V_UPLOAD_CMD].current_val.p
  914. #define USR_UPLOAD_CMD             vars[V_UPLOAD_CMD].user_val.p
  915. #define GLO_UPLOAD_CMD             vars[V_UPLOAD_CMD].global_val.p
  916. #define FIX_UPLOAD_CMD             vars[V_UPLOAD_CMD].fixed_val.p
  917. #define COM_UPLOAD_CMD             vars[V_UPLOAD_CMD].cmdline_val.p
  918. #define VAR_UPLOAD_CMD_PREFIX         vars[V_UPLOAD_CMD_PREFIX].current_val.p
  919. #define USR_UPLOAD_CMD_PREFIX         vars[V_UPLOAD_CMD_PREFIX].user_val.p
  920. #define GLO_UPLOAD_CMD_PREFIX         vars[V_UPLOAD_CMD_PREFIX].global_val.p
  921. #define FIX_UPLOAD_CMD_PREFIX         vars[V_UPLOAD_CMD_PREFIX].fixed_val.p
  922. #define COM_UPLOAD_CMD_PREFIX         vars[V_UPLOAD_CMD_PREFIX].cmdline_val.p
  923. #define VAR_DOWNLOAD_CMD         vars[V_DOWNLOAD_CMD].current_val.p
  924. #define USR_DOWNLOAD_CMD         vars[V_DOWNLOAD_CMD].user_val.p
  925. #define GLO_DOWNLOAD_CMD         vars[V_DOWNLOAD_CMD].global_val.p
  926. #define FIX_DOWNLOAD_CMD         vars[V_DOWNLOAD_CMD].fixed_val.p
  927. #define COM_DOWNLOAD_CMD         vars[V_DOWNLOAD_CMD].cmdline_val.p
  928. #define VAR_DOWNLOAD_CMD_PREFIX         vars[V_DOWNLOAD_CMD_PREFIX].current_val.p
  929. #define USR_DOWNLOAD_CMD_PREFIX         vars[V_DOWNLOAD_CMD_PREFIX].user_val.p
  930. #define GLO_DOWNLOAD_CMD_PREFIX         vars[V_DOWNLOAD_CMD_PREFIX].global_val.p
  931. #define FIX_DOWNLOAD_CMD_PREFIX         vars[V_DOWNLOAD_CMD_PREFIX].fixed_val.p
  932. #define COM_DOWNLOAD_CMD_PREFIX         vars[V_DOWNLOAD_CMD_PREFIX].cmdline_val.p
  933. #define VAR_GOTO_DEFAULT_RULE         vars[V_GOTO_DEFAULT_RULE].current_val.p
  934. #define USR_GOTO_DEFAULT_RULE         vars[V_GOTO_DEFAULT_RULE].user_val.p
  935. #define GLO_GOTO_DEFAULT_RULE         vars[V_GOTO_DEFAULT_RULE].global_val.p
  936. #define FIX_GOTO_DEFAULT_RULE         vars[V_GOTO_DEFAULT_RULE].fixed_val.p
  937. #define COM_GOTO_DEFAULT_RULE         vars[V_GOTO_DEFAULT_RULE].cmdline_val.p
  938. #define VAR_MAILCAP_PATH         vars[V_MAILCAP_PATH].current_val.p
  939. #define USR_MAILCAP_PATH         vars[V_MAILCAP_PATH].user_val.p
  940. #define GLO_MAILCAP_PATH         vars[V_MAILCAP_PATH].global_val.p
  941. #define FIX_MAILCAP_PATH         vars[V_MAILCAP_PATH].fixed_val.p
  942. #define COM_MAILCAP_PATH         vars[V_MAILCAP_PATH].cmdline_val.p
  943. #define VAR_MIMETYPE_PATH         vars[V_MIMETYPE_PATH].current_val.p
  944. #define USR_MIMETYPE_PATH         vars[V_MIMETYPE_PATH].user_val.p
  945. #define GLO_MIMETYPE_PATH         vars[V_MIMETYPE_PATH].global_val.p
  946. #define FIX_MIMETYPE_PATH         vars[V_MIMETYPE_PATH].fixed_val.p
  947. #define COM_MIMETYPE_PATH         vars[V_MIMETYPE_PATH].cmdline_val.p
  948. #define VAR_TCPOPENTIMEO         vars[V_TCPOPENTIMEO].current_val.p
  949. #define USR_TCPOPENTIMEO         vars[V_TCPOPENTIMEO].user_val.p
  950. #define GLO_TCPOPENTIMEO         vars[V_TCPOPENTIMEO].global_val.p
  951. #define FIX_TCPOPENTIMEO         vars[V_TCPOPENTIMEO].fixed_val.p
  952. #define COM_TCPOPENTIMEO         vars[V_TCPOPENTIMEO].cmdline_val.p
  953. #define VAR_RSHOPENTIMEO         vars[V_RSHOPENTIMEO].current_val.p
  954. #define USR_RSHOPENTIMEO         vars[V_RSHOPENTIMEO].user_val.p
  955. #define GLO_RSHOPENTIMEO         vars[V_RSHOPENTIMEO].global_val.p
  956. #define FIX_RSHOPENTIMEO         vars[V_RSHOPENTIMEO].fixed_val.p
  957. #define COM_RSHOPENTIMEO         vars[V_RSHOPENTIMEO].cmdline_val.p
  958.  
  959. #ifdef    NEWBB
  960. #define VAR_NNTP_NEW_GROUP_TIME      vars[V_NNTP_NEW_GROUP_TIME].current_val.p
  961. #define USR_NNTP_NEW_GROUP_TIME      vars[V_NNTP_NEW_GROUP_TIME].user_val.p
  962. #define GLO_NNTP_NEW_GROUP_TIME      vars[V_NNTP_NEW_GROUP_TIME].global_val.p
  963. #define FIX_NNTP_NEW_GROUP_TIME      vars[V_NNTP_NEW_GROUP_TIME].fixed_val.p
  964. #define COM_NNTP_NEW_GROUP_TIME      vars[V_NNTP_NEW_GROUP_TIME].cmdline_val.p
  965. #endif
  966.  
  967. #if defined(DOS) || defined(OS2)
  968. #define VAR_FOLDER_EXTENSION         vars[V_FOLDER_EXTENSION].current_val.p
  969. #define USR_FOLDER_EXTENSION         vars[V_FOLDER_EXTENSION].user_val.p
  970. #define GLO_FOLDER_EXTENSION         vars[V_FOLDER_EXTENSION].global_val.p
  971. #define FIX_FOLDER_EXTENSION         vars[V_FOLDER_EXTENSION].fixed_val.p
  972. #define COM_FOLDER_EXTENSION         vars[V_FOLDER_EXTENSION].cmdline_val.p
  973. #define VAR_NORM_FORE_COLOR         vars[V_NORM_FORE_COLOR].current_val.p
  974. #define USR_NORM_FORE_COLOR         vars[V_NORM_FORE_COLOR].user_val.p
  975. #define GLO_NORM_FORE_COLOR         vars[V_NORM_FORE_COLOR].global_val.p
  976. #define FIX_NORM_FORE_COLOR         vars[V_NORM_FORE_COLOR].fixed_val.p
  977. #define COM_NORM_FORE_COLOR         vars[V_NORM_FORE_COLOR].cmdline_val.p
  978. #define VAR_NORM_BACK_COLOR         vars[V_NORM_BACK_COLOR].current_val.p
  979. #define USR_NORM_BACK_COLOR         vars[V_NORM_BACK_COLOR].user_val.p
  980. #define GLO_NORM_BACK_COLOR         vars[V_NORM_BACK_COLOR].global_val.p
  981. #define FIX_NORM_BACK_COLOR         vars[V_NORM_BACK_COLOR].fixed_val.p
  982. #define COM_NORM_BACK_COLOR         vars[V_NORM_BACK_COLOR].cmdline_val.p
  983. #define VAR_REV_FORE_COLOR         vars[V_REV_FORE_COLOR].current_val.p
  984. #define USR_REV_FORE_COLOR         vars[V_REV_FORE_COLOR].user_val.p
  985. #define GLO_REV_FORE_COLOR         vars[V_REV_FORE_COLOR].global_val.p
  986. #define FIX_REV_FORE_COLOR         vars[V_REV_FORE_COLOR].fixed_val.p
  987. #define COM_REV_FORE_COLOR         vars[V_REV_FORE_COLOR].cmdline_val.p
  988. #define VAR_REV_BACK_COLOR         vars[V_REV_BACK_COLOR].current_val.p
  989. #define USR_REV_BACK_COLOR         vars[V_REV_BACK_COLOR].user_val.p
  990. #define GLO_REV_BACK_COLOR         vars[V_REV_BACK_COLOR].global_val.p
  991. #define FIX_REV_BACK_COLOR         vars[V_REV_BACK_COLOR].fixed_val.p
  992. #define COM_REV_BACK_COLOR         vars[V_REV_BACK_COLOR].cmdline_val.p
  993. #ifdef _WINDOWS
  994. #define VAR_FONT_NAME             vars[V_FONT_NAME].current_val.p
  995. #define USR_FONT_NAME             vars[V_FONT_NAME].user_val.p
  996. #define GLO_FONT_NAME             vars[V_FONT_NAME].global_val.p
  997. #define FIX_FONT_NAME             vars[V_FONT_NAME].fixed_val.p
  998. #define COM_FONT_NAME             vars[V_FONT_NAME].cmdline_val.p
  999. #define VAR_FONT_SIZE             vars[V_FONT_SIZE].current_val.p
  1000. #define USR_FONT_SIZE             vars[V_FONT_SIZE].user_val.p
  1001. #define GLO_FONT_SIZE             vars[V_FONT_SIZE].global_val.p
  1002. #define FIX_FONT_SIZE             vars[V_FONT_SIZE].fixed_val.p
  1003. #define COM_FONT_SIZE             vars[V_FONT_SIZE].cmdline_val.p
  1004. #define VAR_FONT_STYLE             vars[V_FONT_STYLE].current_val.p
  1005. #define USR_FONT_STYLE             vars[V_FONT_STYLE].user_val.p
  1006. #define GLO_FONT_STYLE             vars[V_FONT_STYLE].global_val.p
  1007. #define FIX_FONT_STYLE             vars[V_FONT_STYLE].fixed_val.p
  1008. #define COM_FONT_STYLE             vars[V_FONT_STYLE].cmdline_val.p
  1009. #define VAR_PRINT_FONT_NAME         vars[V_PRINT_FONT_NAME].current_val.p
  1010. #define USR_PRINT_FONT_NAME         vars[V_PRINT_FONT_NAME].user_val.p
  1011. #define GLO_PRINT_FONT_NAME         vars[V_PRINT_FONT_NAME].global_val.p
  1012. #define FIX_PRINT_FONT_NAME         vars[V_PRINT_FONT_NAME].fixed_val.p
  1013. #define COM_PRINT_FONT_NAME         vars[V_PRINT_FONT_NAME].cmdline_val.p
  1014. #define VAR_PRINT_FONT_SIZE         vars[V_PRINT_FONT_SIZE].current_val.p
  1015. #define USR_PRINT_FONT_SIZE         vars[V_PRINT_FONT_SIZE].user_val.p
  1016. #define GLO_PRINT_FONT_SIZE         vars[V_PRINT_FONT_SIZE].global_val.p
  1017. #define FIX_PRINT_FONT_SIZE         vars[V_PRINT_FONT_SIZE].fixed_val.p
  1018. #define COM_PRINT_FONT_SIZE         vars[V_PRINT_FONT_SIZE].cmdline_val.p
  1019. #define VAR_PRINT_FONT_STYLE         vars[V_PRINT_FONT_STYLE].current_val.p
  1020. #define USR_PRINT_FONT_STYLE         vars[V_PRINT_FONT_STYLE].user_val.p
  1021. #define GLO_PRINT_FONT_STYLE         vars[V_PRINT_FONT_STYLE].global_val.p
  1022. #define FIX_PRINT_FONT_STYLE         vars[V_PRINT_FONT_STYLE].fixed_val.p
  1023. #define COM_PRINT_FONT_STYLE         vars[V_PRINT_FONT_STYLE].cmdline_val.p
  1024. #define VAR_WINDOW_POSITION         vars[V_WINDOW_POSITION].current_val.p
  1025. #define USR_WINDOW_POSITION         vars[V_WINDOW_POSITION].user_val.p
  1026. #define GLO_WINDOW_POSITION         vars[V_WINDOW_POSITION].global_val.p
  1027. #define FIX_WINDOW_POSITION         vars[V_WINDOW_POSITION].fixed_val.p
  1028. #define COM_WINDOW_POSITION         vars[V_WINDOW_POSITION].cmdline_val.p
  1029. #endif    /* _WINDOWS */
  1030. #endif    /* DOS */
  1031.  
  1032.  
  1033. #define LARGEST_BITMAP 80
  1034. /* Feature list support (can have up to LARGEST_BITMAP features) */
  1035. /* Is feature "feature" turned on? */
  1036. #define F_ON(feature,ps)   (bitnset((feature),(ps)->feature_list))
  1037. #define F_OFF(feature,ps)  (!F_ON(feature,ps))
  1038. #define F_TURN_ON(feature,ps)   (setbitn((feature),(ps)->feature_list))
  1039. #define F_TURN_OFF(feature,ps)  (clrbitn((feature),(ps)->feature_list))
  1040. /* turn off or on depending on value */
  1041. #define F_SET(feature,ps,value) ((value) ? F_TURN_ON((feature),(ps))       \
  1042.                      : F_TURN_OFF((feature),(ps)))
  1043.  
  1044. /* list of feature numbers (which bit goes with which feature) */
  1045. #define F_OLD_GROWTH                0
  1046. #define F_ENABLE_FULL_HDR           1
  1047. #define F_ENABLE_PIPE               2
  1048. #define F_ENABLE_TAB_COMPLETE       3
  1049. #define F_QUIT_WO_CONFIRM           4
  1050. #define F_ENABLE_JUMP               5
  1051. #define F_ENABLE_ALT_ED             6
  1052. #define F_ENABLE_BOUNCE             7
  1053. #define F_ENABLE_AGG_OPS        8
  1054. #define F_ENABLE_FLAG               9
  1055. #define F_CAN_SUSPEND              10
  1056. #define F_EXPANDED_FOLDERS         11
  1057. #define F_USE_FK                   12
  1058. #define F_INCLUDE_HEADER           13
  1059. #define F_SIG_AT_BOTTOM            14
  1060. #define F_DEL_SKIPS_DEL            15
  1061. #define F_AUTO_EXPUNGE             16
  1062. #define F_AUTO_READ_MSGS           17
  1063. #define F_READ_IN_NEWSRC_ORDER     18
  1064. #define F_SELECT_WO_CONFIRM        19
  1065. #define F_USE_CURRENT_DIR          20
  1066. #define F_SAVE_WONT_DELETE         21
  1067. #define F_SAVE_ADVANCES            22
  1068. #define F_FORCE_LOW_SPEED          23
  1069. #define F_ALT_ED_NOW           24
  1070. #define    F_SHOW_DELAY_CUE       25
  1071. #define    F_AUTO_OPEN_NEXT_UNREAD       26
  1072. #define    F_SELECTED_SHOWN_BOLD       27
  1073. #define    F_QUOTE_ALL_FROMS       28
  1074. #define    F_AUTO_INCLUDE_IN_REPLY       29
  1075. #define    F_DISABLE_CONFIG_SCREEN    30
  1076. #define    F_DISABLE_PASSWORD_CMD     31
  1077. #define    F_DISABLE_UPDATE_CMD       32
  1078. #define    F_DISABLE_KBLOCK_CMD       33
  1079. #define    F_DISABLE_SIGEDIT_CMD       34
  1080. #define    F_ATTACHMENTS_IN_REPLY       35
  1081. #define    F_ENABLE_INCOMING       36
  1082. #define    F_NO_NEWS_VALIDATION       37
  1083. #define    F_EXPANDED_ADDRBOOKS       38
  1084. #define    F_QUELL_LOCAL_LOOKUP       39
  1085. #define    F_COMPOSE_TO_NEWSGRP       40
  1086. #define    F_PRESERVE_START_STOP      41
  1087. #define    F_COMPOSE_REJECTS_UNQUAL   42
  1088. #define    F_FAKE_NEW_IN_NEWS       43
  1089. #define    F_SUSPEND_SPAWNS       44
  1090. #define    F_ENABLE_8BIT           45
  1091. #define    F_COMPOSE_MAPS_DEL       46
  1092. #define    F_ENABLE_8BIT_NNTP       47
  1093. #define    F_ENABLE_MOUSE           48
  1094. #define    F_SHOW_CURSOR           49
  1095. #define    F_PASS_CONTROL_CHARS       50
  1096. #define    F_VERT_FOLDER_LIST       51
  1097. #define    F_AUTO_REPLY_TO           52
  1098. #define    F_VERBOSE_POST           53
  1099. #define    F_FCC_ON_BOUNCE           54
  1100. #define    F_USE_SENDER_NOT_X       55
  1101. #define    F_BLANK_KEYMENU           56
  1102. #define    F_CUSTOM_PRINT           57
  1103. #define    F_DEL_FROM_DOT           58
  1104. #define    F_AUTO_ZOOM           59
  1105. #define    F_AUTO_UNZOOM           60
  1106. #define    F_PRINT_INDEX           61
  1107. #define    F_ALLOW_TALK           62
  1108. #define    F_AGG_PRINT_FF           63
  1109. #define    F_ENABLE_DOT_FILES       64
  1110. #define    F_ENABLE_DOT_FOLDERS       65
  1111. #define    F_FIRST_SEND_FILTER_DFLT   66
  1112. #define    F_ALWAYS_LAST_FLDR_DFLT    67
  1113. #define    F_TAB_TO_NEW           68
  1114. #define    F_QUELL_DEAD_LETTER       69
  1115. #define    F_QUELL_BEEPS           70
  1116. #define    F_QUELL_LOCK_FAILURE_MSGS  71
  1117. #define    F_ENABLE_SPACE_AS_TAB       72
  1118. #define    F_ENABLE_TAB_DELETES       73
  1119. #define    F_FLAG_SCREEN_DFLT       74
  1120. #define    F_ENABLE_XTERM_NEWMAIL       75
  1121. #define F_LAST_FEATURE           75         /* RESET WITH NEW FEATURES */
  1122.  
  1123. #if (F_LAST_FEATURE > (LARGEST_BITMAP - 1))
  1124.    Whoa!  Too many features!
  1125. #endif
  1126.  
  1127.  
  1128. /*======================================================================
  1129.        Macros for debug printfs 
  1130.    n is debugging level:
  1131.        1 logs only highest level events and errors
  1132.        2 logs events like file writes
  1133.        3
  1134.        4 logs each command
  1135.        5
  1136.        6 
  1137.        7 logs details of command execution (7 is highest to run any production)
  1138.          allows core dumps without cleaning up terminal modes
  1139.        8
  1140.        9 logs gross details of command execution
  1141.     
  1142.     This is sort of dumb.  The first argument in x is always debugfile, and
  1143.     we're sort of assuming that to be the case below.  However, we don't
  1144.     want to go back and change all of the dprint calls now.
  1145.   ====*/
  1146. #ifdef DEBUG
  1147. #define   dprint(n,x) {                            \
  1148.            if(debugfile && debug >= (n) && do_debug(debugfile))    \
  1149.           fprintf x ;                        \
  1150.           }
  1151. #else
  1152. #define   dprint(n,x)
  1153. #endif
  1154.  
  1155.  
  1156. /*
  1157.  * Status message types
  1158.  */
  1159. #define    SM_DING        0x01            /* ring bell when displayed  */
  1160. #define    SM_ASYNC    0x02            /* display any time         */
  1161. #define    SM_ORDER    0x04            /* ordered, flush on prompt  */
  1162. #define    SM_MODAL    0x08            /* display, wait for user    */
  1163. #define    SM_INFO        0x10            /* Handy, but discardable    */
  1164.  
  1165. /*
  1166.  * Which header fields should format_envelope output?
  1167.  */
  1168. #define    FE_FROM        0x0001
  1169. #define    FE_SENDER    0x0002
  1170. #define    FE_DATE        0x0004
  1171. #define    FE_TO        0x0008
  1172. #define    FE_CC        0x0010
  1173. #define    FE_BCC        0x0020
  1174. #define    FE_NEWSGROUPS    0x0040
  1175. #define    FE_SUBJECT    0x0080
  1176. #define    FE_MESSAGEID    0x0100
  1177. #define    FE_REPLYTO    0x0200
  1178. #define    FE_INREPLYTO    0x0400
  1179. #define    FE_DEFAULT    (FE_FROM | FE_DATE | FE_TO | FE_CC | FE_BCC \
  1180.              | FE_NEWSGROUPS | FE_SUBJECT | FE_REPLYTO)
  1181.  
  1182. #define ALL_EXCEPT    "all-except"
  1183.  
  1184.  
  1185. /*
  1186.  * Flags to indicate how much index border to paint
  1187.  */
  1188. #define    INDX_CLEAR    0x01
  1189. #define    INDX_HEADER    0x02
  1190. #define    INDX_FOOTER    0x04
  1191.  
  1192.  
  1193. /*
  1194.  * Flags to indicate context (i.e., folder collection) use
  1195.  */
  1196. #define    CNTXT_PRIME    0x0001            /* primary collection        */
  1197. #define    CNTXT_SECOND    0x0002            /* secondary collection     */
  1198. #define    CNTXT_NEWS    0x0004            /* news group collection    */
  1199. #define    CNTXT_PSEUDO    0x0008            /* fake folder entry exists */
  1200. #define    CNTXT_INCMNG    0x0010            /* inbox collection        */
  1201. #define    CNTXT_SAVEDFLT    0x0020            /* default save collection  */
  1202. #define    CNTXT_PARTFIND    0x0040            /* partial find done        */
  1203. #define    CNTXT_NOFIND    0x0080            /* no find done in context  */
  1204. #define    CNTXT_FINDALL   0x0100                   /* Do a find_all on context */
  1205. #ifdef    NEWBB
  1206. #define    CNTXT_NEWBB     0x0200                   /* New bboards - NNTP only  */
  1207. #endif
  1208.  
  1209.  
  1210. /*
  1211.  * Flags indicating folder collection type
  1212.  */
  1213. #define    FTYPE_LOCAL    0x01            /* Local folders      */
  1214. #define    FTYPE_REMOTE    0x02            /* Remote folders      */
  1215. #define    FTYPE_SHARED    0x04            /* Shared folders      */
  1216. #define FTYPE_BBOARD    0x08            /* Bulletin Board folders */
  1217. #define    FTYPE_OLDTECH    0x10            /* Not accessed via IMAP  */
  1218. #define    FTYPE_ANON    0x20            /* anonymous access       */
  1219.  
  1220.  
  1221. /*
  1222.  * Useful def's to specify interesting flags
  1223.  */
  1224. #define    F_SEEN        0x00000001
  1225. #define    F_UNSEEN    0x00000002
  1226. #define    F_DEL        0x00000004
  1227. #define    F_UNDEL        0x00000008
  1228. #define    F_FLAG        0x00000010
  1229. #define    F_UNFLAG    0x00000020
  1230. #define    F_ANS        0x00000040
  1231. #define    F_UNANS        0x00000080
  1232. #define    F_RECENT    0x00000100
  1233. #define    F_UNRECENT    0x00000200
  1234. #define    F_OR_SEEN    0x00000400
  1235. #define    F_OR_UNSEEN    0x00000800
  1236. #define    F_OR_DEL    0x00001000
  1237. #define    F_OR_UNDEL    0x00002000
  1238. #define    F_OR_FLAG    0x00004000
  1239. #define    F_OR_UNFLAG    0x00008000
  1240. #define    F_OR_ANS    0x00010000
  1241. #define    F_OR_UNANS    0x00020000
  1242. #define    F_OR_RECENT    0x00040000
  1243. #define    F_OR_UNRECENT    0x00080000
  1244.  
  1245.  
  1246. /*
  1247.  * Save message rules.  if these grow, widen pine
  1248.  * struct's save_msg_rule...
  1249.  */
  1250. #define    MSG_RULE_DEFLT        0x00
  1251. #define    MSG_RULE_SENDER        0x01
  1252. #define    MSG_RULE_FROM        0x02
  1253. #define    MSG_RULE_RECIP        0x03
  1254. #define    MSG_RULE_LAST        0x04
  1255. #define    MSG_RULE_NICK_SENDER    0x05
  1256. #define    MSG_RULE_NICK_FROM    0x06
  1257. #define    MSG_RULE_NICK_RECIP    0x07
  1258. #define    MSG_RULE_FCC_SENDER    0x08
  1259. #define    MSG_RULE_FCC_FROM    0x09
  1260. #define    MSG_RULE_FCC_RECIP    0x0A
  1261.  
  1262. /*
  1263.  * Fcc rules.  if these grow, widen pine
  1264.  * struct's fcc_rule...
  1265.  */
  1266. #define    FCC_RULE_DEFLT        0x00
  1267. #define    FCC_RULE_RECIP        0x01
  1268. #define    FCC_RULE_LAST        0x02
  1269. #define    FCC_RULE_NICK        0x03
  1270. #define    FCC_RULE_NICK_RECIP    0x04
  1271. #define    FCC_RULE_CURRENT    0x05
  1272.  
  1273. /*
  1274.  * Addrbook sorting rules.  if these grow, widen pine
  1275.  * struct's ab_sort_rule...
  1276.  */
  1277. #define    AB_SORT_RULE_FULL_LISTS        0x00
  1278. #define    AB_SORT_RULE_FULL          0x01
  1279. #define    AB_SORT_RULE_NICK_LISTS         0x02
  1280. #define    AB_SORT_RULE_NICK         0x03
  1281. #define    AB_SORT_RULE_NONE        0x04
  1282.  
  1283. /*
  1284.  * Goto default rules.
  1285.  */
  1286. #define    GOTO_INBOX_RECENT_CLCTN        0x00
  1287. #define    GOTO_INBOX_FIRST_CLCTN        0x01
  1288. #define    GOTO_LAST_FLDR            0x02
  1289.  
  1290. /*
  1291.  * These are def's to help manage local, private flags pine uses
  1292.  * to maintain it's mapping table (see MSGNO_S def).  The local flags
  1293.  * are actually stored in spare bits in c-client's pre-message
  1294.  * MESSAGECACHE struct.  But they're private, you ask.  Since the flags
  1295.  * are tied to the actual message (independent of the mapping), storing
  1296.  * them in the c-client means we don't have to worry about them during
  1297.  * sorting and such.  See {set,get}_lflags for more on local flags.
  1298.  */
  1299. #define    MN_NONE        0x0000            /* No Pine specific flags  */
  1300. #define    MN_HIDE        0x0001            /* Pine specific hidden    */
  1301. #define    MN_EXLD        0x0002            /* Pine specific excluded  */
  1302. #define    MN_SLCT        0x0004            /* Pine specific selected  */
  1303.  
  1304.  
  1305. /*
  1306.  * Macros to aid hack to turn off talk permission.
  1307.  * Bit 020 is usually used to turn off talk permission, we turn off
  1308.  * 002 also for good measure, since some mesg commands seem to do that.
  1309.  */
  1310. #define    TALK_BIT        020        /* mode bits */
  1311. #define    GM_BIT            002
  1312. #define    TMD_CLEAR        0        /* functions */
  1313. #define    TMD_SET            1
  1314. #define    TMD_RESET        2
  1315. #define    allow_talk(p)        tty_chmod((p), TALK_BIT, TMD_SET)
  1316. #define    disallow_talk(p)    tty_chmod((p), TALK_BIT|GM_BIT, TMD_CLEAR)
  1317.  
  1318.  
  1319.  
  1320. /*======================================================================
  1321.             Various structures that Pine uses
  1322.  ====*/
  1323.  
  1324. struct ttyo {
  1325.     int    screen_rows,
  1326.     screen_cols,
  1327.     header_rows,    /* number of rows for titlebar and whitespace */
  1328.     footer_rows;    /* number of rows for status and keymenu      */
  1329. };
  1330.  
  1331. /*
  1332.  * HEADER_ROWS is always 2.  1 for the titlebar and 1 for the
  1333.  * blank line after the titlebar.  We should probably make it go down
  1334.  * to 0 when the screen shrinks but instead we're just figuring out
  1335.  * if there is enough room by looking at screen_rows.
  1336.  * FOOTER_ROWS is either 3 or 1.  Normally it is 3, 2 for the keymenu plus 1
  1337.  * for the status line.  If the NoKeyMenu command has been given, then it is 1.
  1338.  */
  1339. #define HEADER_ROWS(X) ((X)->ttyo->header_rows)
  1340. #define FOOTER_ROWS(X) ((X)->ttyo->footer_rows)
  1341.  
  1342.  
  1343. /* (0,0) is upper left */
  1344. typedef struct screen_position {
  1345.     int row;
  1346.     int col;
  1347. } Pos;
  1348.  
  1349. typedef enum {SortDate, SortArrival, SortFrom, SortSubject, SortSubject2,
  1350.                 SortTo, SortCc, SortSize, EndofList}   SortOrder;
  1351.  
  1352.  
  1353. /*
  1354.  * This is *the* struct that keeps track of the pine message number to
  1355.  * raw c-client sequence number mappings.  The mapping is necessary
  1356.  * because pine may re-sort or even hide (exclude) c-client numbers
  1357.  * from the displayed list of messages.  See mailindx.c:msgno_* and
  1358.  * the mn_* macros above for how this things gets used.  See
  1359.  * mailcmd.c:pseudo_selected for an explanation of the funny business
  1360.  * going on with the "hilited" field...
  1361.  */
  1362. typedef struct msg_nos {
  1363.     long      *select,                /* selected message array  */
  1364.            sel_cur,                /* current interesting msg */
  1365.            sel_cnt,                /* its size           */
  1366.            sel_size,            /* its size           */
  1367.               *sort,                /* sorted array of msgno's */
  1368.                sort_size,            /* its size           */
  1369.            max_msgno,            /* total messages       */
  1370.            hilited;                /* holder for "current" msg*/
  1371.     SortOrder  sort_order;            /* list's current sort     */
  1372.     unsigned   reverse_sort:1;            /* whether that's reversed */
  1373.     long       flagged_hid,            /* hidden count           */
  1374.            flagged_exld,            /* excluded count       */
  1375.            flagged_tmp;            /* tmp flagged count       */
  1376. } MSGNO_S;
  1377.  
  1378. /*
  1379.  * Flags for the pipe command routines...
  1380.  */
  1381. #define    PIPE_WRITE    0x0001            /* set up pipe for reading */
  1382. #define    PIPE_READ    0x0002            /* set up pipe for reading */
  1383. #define    PIPE_NOSHELL    0x0004            /* don't exec in shell     */
  1384. #define    PIPE_USER    0x0008            /* user mode           */
  1385. #define    PIPE_STDERR    0x0010            /* stderr to child output  */
  1386. #define    PIPE_PROT    0x0020            /* protected mode       */
  1387. #define    PIPE_RESET    0x0040            /* reset terminal mode     */
  1388.  
  1389. /*
  1390.  * stucture required for the pipe commands...
  1391.  */
  1392. typedef struct pipe_s {
  1393.     int      pid,                /* child's process id       */
  1394.          mode;                /* mode flags used to open  */
  1395.     SigType  (*hsig)(),                /* previously installed...  */
  1396.          (*isig)(),                /* handlers            */
  1397.          (*qsig)();
  1398.     FILE    *ifilep, *ofilep;            /* {in,out}put file pointers*/
  1399. #ifdef    _WINDOWS
  1400.     char    *command;                /* command to execute */
  1401.     char    *tmpfile;                /* tmpfile to remove */
  1402. #endif
  1403. } PIPE_S;
  1404.  
  1405.  
  1406. /*------------------------------
  1407.     Stucture to keep track of the various folder collections being
  1408.     dealt with.
  1409.   ----*/
  1410. typedef struct context {
  1411.     char           *context;            /* context string       */
  1412.     char           *label[4];            /* description lines       */
  1413.     char           *nickname;            /* user provided nickname  */
  1414.     char            last_folder[MAXFOLDER+1];    /* last folder used        */
  1415.     void           *folders;            /* folder data             */
  1416.     unsigned short  type;            /* type of collection      */
  1417.     unsigned short  use;            /* use flags for context   */
  1418.     unsigned short  num;            /* context number in list  */
  1419.     int            d_line;            /* display line for labels */
  1420.     struct context *next;            /* next context struct       */
  1421. } CONTEXT_S;
  1422.  
  1423.  
  1424. /*------------------------------
  1425.    Used for displaying as well as
  1426.    keeping track of folders. 
  1427.    Currently about 25 bytes.
  1428.   ----*/
  1429. typedef struct folder {
  1430.     char     prefix[8];                /* news prefix?           */
  1431.     unsigned char   name_len;            /* name length           */
  1432.     unsigned short msg_count;            /* Up to 65,000 messages   */
  1433.     unsigned short unread_count;
  1434.     unsigned short d_col;
  1435.     unsigned short d_line;
  1436.     char     *nickname;                /* folder's short name     */
  1437.     char     name[1];                /* folder's name           */
  1438. } FOLDER_S;
  1439.  
  1440.  
  1441. /*------------------------------
  1442.    Used for index display
  1443.    formatting.
  1444.   ----*/
  1445. typedef enum {iStatus, iFStatus, iMessNo, iDate, iFromTo, iFrom, iTo, iSender,
  1446.         iSize, iDescripSize, iSubject, iNothing} IndexColType;
  1447. typedef enum {AllAuto, Fixed, Percent, WeCalculate, Special} WidthType;
  1448. typedef enum {Left, Right} ColAdj;
  1449.  
  1450. typedef struct col_description {
  1451.     IndexColType ctype;
  1452.     WidthType    wtype;
  1453.     int         req_width;
  1454.     int         width;
  1455.     char    *string;
  1456.     int         actual_length;
  1457.     ColAdj     adjustment;
  1458. } INDEX_COL_S;
  1459.  
  1460.  
  1461. typedef long MsgNo;
  1462.  
  1463. struct variable {
  1464.     char *name;
  1465.     unsigned  is_obsolete:1;    /* variable read in, not written unless set */
  1466.     unsigned  is_used:1;    /* Some variables are disabled              */
  1467.     unsigned  been_written:1;
  1468.     unsigned  is_user:1;
  1469.     unsigned  is_global:1;
  1470.     unsigned  is_list:1;    /* flag indicating variable is a list       */
  1471.     unsigned  is_fixed:1;    /* sys mgr has fixed this variable          */
  1472.     char     *descrip;        /* description                              */
  1473.     union {
  1474.     char *p;        /* pointer to single string value           */
  1475.     char **l;        /* pointer to list of string values         */
  1476.     } current_val;
  1477.     union {
  1478.     char *p;        /* pointer to single string value           */
  1479.     char **l;        /* pointer to list of string values         */
  1480.     } user_val;            /* from pinerc                              */
  1481.     union {
  1482.     char *p;        /* pointer to single string value           */
  1483.     char **l;        /* pointer to list of string values         */
  1484.     } global_val;        /* from default or pine.conf                */
  1485.     union {
  1486.     char *p;        /* pointer to single string value           */
  1487.     char **l;        /* pointer to list of string values         */
  1488.     } fixed_val;        /* fixed value assigned in pine.conf.fixed  */
  1489.     union {
  1490.     char *p;        /* pointer to single string value           */
  1491.     char **l;        /* pointer to list of string values         */
  1492.     } cmdline_val;        /* user typed as cmdline arg                */
  1493. };
  1494.  
  1495.  
  1496.  
  1497. /*
  1498.  * Generic name/value pair structure
  1499.  */
  1500. typedef struct nameval {
  1501.     char *name;            /* the name that goes in the config file */
  1502.     int   value;        /* the internal bit number */
  1503. } NAMEVAL_S;            /* available features in init.c:feat_list */
  1504.  
  1505.  
  1506. typedef enum {ShowAll, ShowParts, ShowNone} MimeShow;
  1507.  
  1508. typedef struct attachment {
  1509.     char           *description;
  1510.     BODY           *body;
  1511.     unsigned int    can_display:2;
  1512.     unsigned int    use_external_viewer:1;
  1513.     unsigned int    shown:1;
  1514.     MimeShow        show;
  1515.     char       *number;
  1516.     char            size[25];
  1517. } ATTACH_S;
  1518.  
  1519. /*
  1520.  * Valid flags for can_display field in attachment struct...
  1521.  */
  1522. #define    CD_NOCANDO    0    /* Can't display this type     */
  1523. #define    CD_GOFORIT    1    /* Can display this type       */
  1524. #define    CD_DEFERRED    2    /* haven't queried mailcap yet */
  1525.  
  1526.  
  1527. typedef struct header_line {
  1528.     unsigned long id;                /* header line's uid */
  1529.     char     line[1];                /* header line name  */
  1530. } HLINE_S;
  1531.  
  1532.  
  1533.  
  1534.  
  1535. /*------
  1536.    A key menu has two ways to turn on and off individual items in the menu.
  1537.    If there is a null entry in the key_menu structure for that key, then
  1538.    it is off.  Also, if the passed bitmap has a zero in the position for
  1539.    that key, then it is off.  This means you can usually set all of the
  1540.    bitmaps and only turn them off if you want to kill a key that is normally
  1541.    there otherwise.
  1542.    Each key_menu is an array of keys with a multiple of 12 number of keys.
  1543.   ------*/
  1544. #define BM_SIZE (LARGEST_BITMAP / 8)
  1545. #define BM_MENUS (4)  /* could be as large as (LARGEST_BITMAP / 12) */
  1546. #define _BITCHAR(bit) ((bit) / 8)
  1547. #define _BITBIT(bit) (1 << ((bit) % 8))
  1548. typedef unsigned char bitmap_t[BM_SIZE];
  1549. /* is bit set? */
  1550. #define bitnset(bit,map) (((map)[_BITCHAR(bit)] & _BITBIT(bit)) ? 1 : 0)
  1551. /* set bit */
  1552. #define setbitn(bit,map) ((map)[_BITCHAR(bit)] |= _BITBIT(bit))
  1553. /* clear bit */
  1554. #define clrbitn(bit,map) ((map)[_BITCHAR(bit)] &= ~_BITBIT(bit))
  1555. /* clear entire bitmap */
  1556. #define clrbitmap(map)   memset((void *)(map), 0, (size_t)BM_SIZE)
  1557. /* set entire bitmap */
  1558. #define setbitmap(map)   memset((void *)(map), 0xff, (size_t)BM_SIZE)
  1559. /*------
  1560.   Argument to draw_keymenu().  These are to identify which of the possibly
  1561.   multiple sets of twelve keys should be shown in the keymenu.  That is,
  1562.   a keymenu may have 24 or 36 keys, so that there are 2 or 3 different
  1563.   screens of key menus for that keymenu.  FirstMenu means to use the
  1564.   first twelve, NextTwelve uses the one after the previous one, SameTwelve
  1565.   uses the same one, AParticularTwelve uses the value in the "which"
  1566.   argument to draw_keymenu().
  1567.   ------*/
  1568. typedef enum {FirstMenu, NextTwelve, SameTwelve, AParticularTwelve} OtherMenu;
  1569.  
  1570.  
  1571. /*
  1572.  * Placeholders for keymenu tags used in some ports  (well, only in the 
  1573.  * windows port for now) to turn on commands in the Menu Bar.
  1574.  */
  1575. #ifndef    KS_OSDATAVAR
  1576. #define KS_OSDATAVAR
  1577. #define    KS_OSDATAGET(X)
  1578. #define    KS_OSDATASET(X, Y)
  1579.  
  1580. #define KS_NONE
  1581. #define KS_VIEW
  1582. #define KS_EXPUNGE
  1583. #define KS_ZOOM
  1584. #define KS_SORT
  1585. #define KS_HDRMODE
  1586. #define KS_MAINMENU
  1587. #define KS_FLDRLIST
  1588. #define KS_FLDRINDEX
  1589. #define KS_COMPOSER
  1590. #define KS_PREVPAGE
  1591. #define KS_PREVMSG
  1592. #define KS_NEXTMSG
  1593. #define KS_ADDRBOOK
  1594. #define KS_WHEREIS
  1595. #define KS_PRINT
  1596. #define KS_REPLY
  1597. #define KS_FORWARD
  1598. #define KS_BOUNCE
  1599. #define KS_DELETE
  1600. #define KS_UNDELETE
  1601. #define KS_FLAG
  1602. #define KS_SAVE
  1603. #define KS_EXPORT
  1604. #define KS_TAKEADDR
  1605. #define KS_SELECT
  1606. #define    KS_SELECTCUR
  1607. #define KS_APPLY
  1608. #define KS_POSTPONE
  1609. #define KS_SEND
  1610. #define KS_CANCEL
  1611. #define KS_ATTACH
  1612. #define KS_TOADDRBOOK
  1613. #define KS_READFILE
  1614. #define KS_JUSTIFY
  1615. #define KS_ALTEDITOR
  1616. #define KS_GENERALHELP
  1617. #define KS_SCREENHELP
  1618. #define KS_EXIT
  1619. #define KS_NEXTPAGE
  1620. #define KS_SAVEFILE
  1621. #define KS_CURPOSITION
  1622. #define KS_GOTOFLDR
  1623. #define KS_JUMPTOMSG
  1624. #define KS_RICHHDR
  1625. #define KS_EXITMODE
  1626. #define KS_REVIEW
  1627. #define KS_UNDO
  1628. #define KS_KEYMENU
  1629. #define KS_OPTIONS
  1630. #endif
  1631.  
  1632. /*
  1633.  * In the next iteration we want to move column out of this structure since
  1634.  * it is the only dynamic data here.  That way we should be able to
  1635.  * consolidate some of the static data that initializes the keymenus.
  1636.  */
  1637. struct key {
  1638.     char  *name;            /* the short name */
  1639.     char  *label;            /* the descriptive label */
  1640.     KS_OSDATAVAR            /* slot for port-specific data */
  1641.     short  column;            /* menu col after formatting */
  1642. };
  1643.  
  1644. struct key_menu {
  1645.     unsigned char how_many;        /* how many separate sets of 12      */
  1646.     unsigned char which;        /* which of the sets are we using    */
  1647.     short         width[BM_MENUS];     /* this ought to be of size how_many */
  1648.     struct key     *keys;            /* array of how_many*12 size structs */
  1649.     bitmap_t      bitmap;
  1650. };
  1651.  
  1652. /*
  1653.  * Macro to simplify instantiation of key_menu structs from key structs
  1654.  */
  1655. #define    INST_KEY_MENU(X, Y)    static struct key_menu X = \
  1656.                         {sizeof(Y)/(sizeof(Y[0])*12), \
  1657.                         0, 0, 0, 0, 0, Y}
  1658.  
  1659. /*
  1660.  * used to store system derived user info
  1661.  */
  1662. typedef struct user_info {
  1663.     char *homedir;
  1664.     char *login;
  1665.     char *fullname;
  1666. } USER_S;
  1667.  
  1668. typedef int (*percent_done_t)();    /* returns %done for progress status msg */
  1669.  
  1670. /* used to fake alarm syscall on systems without it */
  1671. #ifndef    ALARM_BLIP
  1672. #define ALARM_BLIP()
  1673. #endif
  1674.  
  1675.  
  1676. /*
  1677.  * Printing control structure
  1678.  */
  1679. typedef struct print_ctrl {
  1680. #ifndef    DOS
  1681.     PIPE_S  *pipe;        /* control struct for pipe to write text */
  1682.     FILE    *fp;        /* file pointer to write printed text into */
  1683.     char    *result;    /* file containing print command's output */
  1684. #endif
  1685. #ifdef    OS2
  1686.     int    ispipe;
  1687. #endif
  1688.     int      err;        /* bit indicating something went awry */
  1689. } PRINT_S;
  1690.  
  1691.  
  1692.  
  1693. /*----------------------------------------------------------------------
  1694.    This structure sort of takes the place of global variables or perhaps
  1695. is the global variable.  (It can be accessed globally as ps_global.  One
  1696. advantage to this is that as soon as you see a reference to the structure
  1697. you know it is a global variable. 
  1698.    In general it is treated as global by the lower level and utility
  1699. routines, but it is not treated so by the main screen driving routines.
  1700. Each of them receives it as an argument and then sets ps_global to the
  1701. argument they received.  This is sort of with the thought that things
  1702. might be coupled more loosely one day and that Pine might run where there
  1703. is more than one window and more than one instance.  But we haven't kept
  1704. up with this convention very well.
  1705.  ----*/
  1706.   
  1707. struct pine {
  1708.     void       (*next_screen)();    /* See loop at end of main() for how */
  1709.     void       (*prev_screen)();    /* these are used...             */
  1710.     void       (*redrawer)();        /* NULL means stay in current screen */
  1711.  
  1712.     CONTEXT_S   *context_list;        /* list of user defined contexts */
  1713.     CONTEXT_S   *context_current;    /* default open context          */
  1714.     CONTEXT_S   *context_last;        /* most recently open context    */
  1715.  
  1716.     char         inbox_name[MAXFOLDER+1];
  1717.     MAILSTREAM  *inbox_stream;        /* these used when current folder */
  1718.     long         inbox_new_mail_count;    /* is *not* inbox...          */
  1719.     long         inbox_expunge_count;
  1720.     int          inbox_changed;
  1721.     MSGNO_S    *inbox_msgmap;        /* pointer to inbox mapping struct  */
  1722.     
  1723.     MAILSTREAM  *mail_stream;        /* c-client's current folder stream */
  1724.  
  1725.     MSGNO_S     *msgmap;        /* message num mapping into stream  */
  1726.  
  1727.     long         last_msgno_flagged;
  1728.     long         new_mail_count;
  1729.     long         expunge_count;
  1730.     int          mail_box_changed;
  1731.     int          sort_is_deferred;
  1732.     char         cur_folder[MAXPATH+1];
  1733.     ATTACH_S    *atmts;
  1734.     int          atmts_allocated;
  1735.     INDEX_COL_S *index_disp_format;
  1736.  
  1737.     char        *folders_dir;
  1738.     unsigned     mangled_footer:1;     /* footer needs repainting */
  1739.     unsigned     mangled_header:1;    /* header needs repainting */
  1740.     unsigned     mangled_body:1;    /* body of screen needs repainting */
  1741.     unsigned     mangled_screen:1;    /* whole screen needs repainting */
  1742.     unsigned     in_init_seq:1;        /* executing initial cmd list */
  1743.     unsigned     save_in_init_seq:1;
  1744.     unsigned     dont_use_init_cmds:1;    /* use keyboard input when true */
  1745.     unsigned     give_fixed_warning:1;    /* warn user about "fixed" vars */
  1746.     unsigned     fix_fixed_warning:1;    /* offer to fix it              */
  1747.     unsigned     unseen_in_view:1;
  1748.     unsigned     show_folders_dir:1;    /* show folders dir path when showing
  1749.                                                    folder names */
  1750.     unsigned     io_error_on_stream:1;    /* last write on mail_stream failed */
  1751.     unsigned     def_sort_rev:1;    /* true if reverse sort is default  */ 
  1752.     unsigned     restricted:1;
  1753.     unsigned     show_dot_names:1;
  1754.     unsigned     nr_mode:1;
  1755.     unsigned     anonymous:1;           /* for now implys nr_mode */
  1756.     unsigned     save_msg_rule:4;
  1757.     unsigned     fcc_rule:3;
  1758.     unsigned     ab_sort_rule:3;
  1759.     unsigned     goto_default_rule:2;
  1760.     unsigned     full_header:1;         /* display full headers */
  1761.     unsigned     orig_use_fkeys:1;
  1762.  
  1763.     unsigned     try_to_create:1;     /* flag to try mail_create during save */
  1764.     unsigned     low_speed:1;         /* Special screen painting 4 low speed */
  1765.     unsigned     dead_inbox:1;
  1766.     unsigned     dead_stream:1;
  1767.     unsigned     noticed_dead_inbox:1;
  1768.     unsigned     noticed_dead_stream:1;
  1769.     unsigned     mm_log_error:1;
  1770.     unsigned     compose_mime:1;
  1771.     unsigned     show_new_version:1;
  1772.     unsigned     pre390:1;        /** temporary!!!! **/
  1773.     unsigned     first_time_user:1;
  1774.     unsigned     outstanding_pinerc_changes:1;
  1775.     unsigned     intr_pending:1;    /* received SIGINT and haven't acted */
  1776.     unsigned     readonly_pinerc:1;
  1777.     unsigned     view_all_except:1;
  1778.     bitmap_t     feature_list;       /* a bitmap of all the features */
  1779.     char       **feat_list_back_compat;
  1780.  
  1781.     /*--- Command line flags, modify only on start up ---*/
  1782.     unsigned     start_in_index:1;
  1783.     unsigned     start_entry;
  1784.     unsigned     more_mode:1;
  1785.  
  1786.     unsigned     noshow_error:1;
  1787.     unsigned     noshow_warn:1;
  1788.     unsigned     shown_newmail:1;
  1789.     unsigned     noshow_timeout:1;
  1790.  
  1791.     unsigned     painted_body_on_startup:1;
  1792.     unsigned     painted_footer_on_startup:1;
  1793.     unsigned     open_readonly_on_startup:1;
  1794.  
  1795. #if defined(DOS) || defined(OS2)
  1796.     unsigned     blank_user_id:1;
  1797.     unsigned     blank_personal_name:1;
  1798.     unsigned     blank_user_domain:1;
  1799. #endif
  1800.  
  1801.     short     init_context;
  1802.  
  1803.     int         *initial_cmds;         /* cmds to execute on startup */
  1804.     int         *free_initial_cmds;    /* used to free when done */
  1805.  
  1806.     char         c_client_error[300];  /* when nowhow_error is set and PARSE */
  1807.  
  1808.     struct ttyo *ttyo;
  1809.     KBESC_T     *kbesc;
  1810.  
  1811.     USER_S     ui;        /* system derived user info */
  1812.  
  1813.     char    *home_dir,
  1814.                 *hostname,    /* Fully qualified hostname */
  1815.                 *localdomain,    /* The (DNS) domain this host resides in */
  1816.                 *userdomain,    /* The per user domain from .pinerc or */
  1817.                 *maildomain,    /* Domain name for most uses */
  1818. #if defined(DOS) || defined(OS2)
  1819.                 *pine_dir,    /* argv[0] as provided by DOS */
  1820. #endif
  1821.                 *pine_conf,    /* Location of global pine.conf */
  1822.                 *pinerc,    /* Location of user's pinerc */
  1823.         *pine_name;    /* name we were invoked under */
  1824.  
  1825.     SortOrder    def_sort,    /* Default sort type */
  1826.          sort_types[20];
  1827.  
  1828.     int          last_expire_year, last_expire_month;
  1829.  
  1830.     int         printer_category;
  1831.     int         viewer_overlap;
  1832.     int         status_msg_delay;
  1833.  
  1834.     int         composer_fillcol;
  1835.  
  1836.     char     last_error[500],
  1837.            **init_errs;
  1838.  
  1839.     PRINT_S    *print;
  1840.  
  1841.     struct variable *vars;
  1842. };
  1843.  
  1844.  
  1845. /*------------------------------
  1846.   Structure to pass optionally_enter to tell it what keystrokes
  1847.   are special
  1848.   ----*/
  1849.  
  1850. typedef struct esckey {
  1851.     int  ch;
  1852.     int  rval;
  1853.     char *name;
  1854.     char *label;
  1855. } ESCKEY_S;
  1856.  
  1857. /*
  1858.  * Optionally_enter flags.
  1859.  */
  1860. #define OE_DISALLOW_CANCEL    0x01
  1861. #define OE_ENABLE_QUOTING    0x02
  1862.  
  1863.  
  1864. struct date {
  1865.     int     sec, minute, hour, day, month, 
  1866.      year, hours_off_gmt, min_off_gmt, wkday;
  1867. };
  1868.  
  1869.  
  1870. /*------------------------------
  1871.   Structures and enum used to expand the envelope structure to
  1872.   support user defined headers.
  1873.   ----*/
  1874.  
  1875. typedef enum {FreeText, Address, Fcc, Attachment, Subject} FieldType;
  1876.  
  1877. typedef struct pine_field {
  1878.     char     *name;            /* field's literal name            */
  1879.     FieldType type;            /* field's type                */
  1880.     unsigned  canedit:1;        /* allow editing of this field        */
  1881.     unsigned  writehdr:1;        /* write rfc822 header for field    */
  1882.     unsigned  localcopy:1;        /* copy to fcc or postponed        */
  1883.     unsigned  rcptto:1;            /* send to this if type Address        */
  1884.     ADDRESS **addr;            /* used if type is Address        */
  1885.     char     *scratch;            /* scratch pointer for Address type */
  1886.     char    **text;            /* field's free text form        */
  1887.     char     *textbuf;            /* need to free this when done        */
  1888.     struct headerentry *he;        /* he that goes with this field, a  */
  1889.                     /*   pointer into headerentry array */
  1890.     struct pine_field *next;        /* next pine field            */
  1891. } PINEFIELD;
  1892.  
  1893.  
  1894. typedef struct {
  1895.     ENVELOPE   *env;        /* standard c-client envelope        */
  1896.     PINEFIELD  *local;        /* this is all of the headers        */
  1897.     PINEFIELD  *custom;        /* ptr to start of custom headers    */
  1898.     PINEFIELD **sending_order;    /* array giving writing order of hdrs    */
  1899. } METAENV;
  1900.  
  1901.  
  1902. typedef enum {OpenFolder, SaveMessage, FolderMaint, GetFcc,
  1903.         Subscribe, PostNews} FolderFun;
  1904. typedef enum {MsgIndex, MultiMsgIndex, ZoomIndex} IndexType;
  1905. typedef enum {FolderName, MessageNumber, MsgTextPercent, PageNumber,
  1906.         TextPercent, FileTextPercent} TitleBarType;
  1907. typedef enum {HelpText, MainHelpText, ComposerHelpText, NewsText, MessageText,
  1908.         AttachText, WhoText, NetNewsText, SimpleText,
  1909.         ReviewMsgsText, ViewAbookText, ViewAbookAtt} TextType;
  1910. typedef enum {CharStarStar, CharStar, FileStar,
  1911.         TmpFileStar, PicoText} SourceType;
  1912. typedef enum {GoodTime, BadTime, VeryBadTime, DoItNow} CheckPointTime;
  1913. typedef enum {InLine, QStatus} DetachErrStyle;
  1914.  
  1915. /*
  1916.  * typedefs of generalized filters used by gf_pipe
  1917.  */
  1918. typedef int  (*gf_io_t)();    /* type of get and put char function     */
  1919. typedef void (*filter_t)();    /* type of filters for piping            */
  1920. typedef struct filter_s {    /* type to hold data for filter function */
  1921.     filter_t f;            /* next function in the pipe             */
  1922.     struct filter_s *next;    /* next filter to call                   */
  1923.     long     n;            /* number of chars seen                  */
  1924.     short    f1;        /* flags                                 */
  1925.     short    f2;        /* second place for flags                */
  1926.     unsigned char t;        /* temporary char                        */
  1927.     char     *line;        /* place for temporary storage           */
  1928.     char     *linep;        /* pointer into storage space            */
  1929.     void     *data;        /* misc data pointer             */
  1930.     unsigned char queue[1 + GF_MAXBUF];
  1931.     short      queuein, queueout;
  1932. } FILTER_S;
  1933.  
  1934. /*
  1935.  * typedef used by storage object routines
  1936.  */
  1937.  
  1938. typedef struct store_object {
  1939.     unsigned char *dp;        /* current position in data         */
  1940.     unsigned char *eod;        /* end of current data             */
  1941.     void      *txt;        /* container's data             */
  1942.     unsigned char *eot;        /* end of space alloc'd for data     */
  1943.     int  (*writec) PROTO((int, struct store_object *));
  1944.     int  (*readc) PROTO((unsigned char *, struct store_object *));
  1945.     int  (*puts) PROTO((struct store_object *, char *));
  1946.     fpos_t       used;    /* amount of object in use         */
  1947.     char          *name;    /* optional object name             */
  1948.     SourceType     src;        /* what we're copying into         */
  1949.     short          flags;    /* flags relating to object use         */
  1950. } STORE_S;
  1951.  
  1952. #define    so_writec(c, so)    ((*(so)->writec)((c), (so)))
  1953. #define    so_readc(c, so)        ((*(so)->readc)((c), (so)))
  1954. #define    so_puts(so, s)        ((*(so)->puts)((so), (s)))
  1955.  
  1956.  
  1957. /*
  1958.  * Attribute table where information on embedded formatting and such
  1959.  * is really stored.
  1960.  */
  1961.  
  1962. typedef    enum {Link, LinkTarget} EmbedActions;
  1963.  
  1964. typedef struct atable_s {    /* a stands for either "anchor" or "action" */
  1965.     short     handle;    /* handle for this action */
  1966.     EmbedActions action;    /* type of action indicated */
  1967.     short     len;        /* number of characters in label */
  1968.     unsigned     wasuline:1;    /* previously underlined (not standard bold) */
  1969.     char    *name;        /* pointer to name of action */
  1970.     PARAMETER    *parms;        /* pointer to  necessary data */
  1971.     struct atable_s *next;
  1972. } ATABLE_S;
  1973.  
  1974.  
  1975. #define TAG_EMBED    '\377'    /* Announces embedded data in text string */
  1976. #define    TAG_INVON    '\001'    /* Supported character attributes      */
  1977. #define    TAG_INVOFF    '\002'
  1978. #define    TAG_BOLDON    '\003'
  1979. #define    TAG_BOLDOFF    '\004'
  1980. #define    TAG_ULINEON    '\005'
  1981. #define    TAG_ULINEOFF    '\006'
  1982. #define    TAG_MIN_HANDLE    '\007'    /* indicate's a handle to an action      */
  1983. #define    TAG_MAX_HANDLE    '\377'
  1984.  
  1985.  
  1986. /*
  1987.  * Structures to control flag maintenance screen
  1988.  */
  1989. struct flag_table {
  1990.     char     *name;        /* flag's name string */
  1991.     HelpType  help;        /* help text */
  1992.     long      flag;        /* flag tag (i.e., F_DEL above) */
  1993.     unsigned  set:2;        /* its state (set, unset, unknown) */
  1994.     unsigned  ukn:1;        /* allow unknown state */
  1995. };
  1996.  
  1997. struct flag_screen {
  1998.     char          **explanation;
  1999.     struct flag_table  *flag_table;
  2000. };
  2001.  
  2002.  
  2003. /*
  2004.  * Some defs to help keep flag setting straight...
  2005.  */
  2006. #define    CMD_FLAG_CLEAR    FALSE
  2007. #define    CMD_FLAG_SET    TRUE
  2008. #define    CMD_FLAG_UNKN    2
  2009.  
  2010.  
  2011. /*
  2012.  * Structure and macros to help control format_header_text
  2013.  */
  2014. typedef struct header_s {
  2015.     unsigned type:4;
  2016.     unsigned except:1;
  2017.     union {
  2018.     char **l;        /* list of char *'s */
  2019.     long   b;        /* bit field of header fields (FE_* above) */
  2020.     } h;
  2021. } HEADER_S;
  2022.  
  2023. #define    HD_LIST        1
  2024. #define    HD_BFIELD    2
  2025. #define    HD_INIT(H, L, E, B)    if((L) && (L)[0]){            \
  2026.                     (H)->type = HD_LIST;        \
  2027.                     (H)->except = (E);            \
  2028.                     (H)->h.l = (L);            \
  2029.                 }                    \
  2030.                 else{                    \
  2031.                     (H)->type = HD_BFIELD;        \
  2032.                     (H)->h.b = (B);            \
  2033.                 }
  2034.  
  2035.  
  2036.  
  2037. /*======================================================================
  2038.     Declarations of all the Pine functions.
  2039.  ====*/
  2040.   
  2041. /*-- addrbook.c --*/
  2042. void        addrbook_reset PROTO((void));
  2043. char       *addr_book_bounce PROTO((void));
  2044. char       *addr_book_compose PROTO((char **));
  2045. char       *addr_book_compose_lcc PROTO((char **));
  2046. void        addr_book_screen PROTO((struct pine *));
  2047. int        address_is_us PROTO((ADDRESS *, struct pine *));
  2048. int        address_is_same PROTO((ADDRESS *, ADDRESS *));
  2049. char       *addr_list_string PROTO((ADDRESS *,
  2050.                   char *(*f) PROTO((ADDRESS *, char *)), int));
  2051. char       *addr_string PROTO((ADDRESS *, char *));
  2052. char      **detach_abook_att PROTO ((MAILSTREAM *, long, BODY *, char *));
  2053. char       *simple_addr_string PROTO((ADDRESS *, char *));
  2054. int        build_address PROTO((char *, char **, char **, BUILDER_ARG *));
  2055. int        build_addr_lcc PROTO((char *, char **, char **, BUILDER_ARG *));
  2056. void        cmd_take_addr PROTO((struct pine *, MSGNO_S *, int));
  2057. void        completely_done_with_adrbks PROTO((void));
  2058. ADDRESS    *copyaddr PROTO((ADDRESS *));
  2059. void        just_update_lookup_file PROTO((char *, char *));
  2060. char       *get_fcc PROTO((char *));
  2061. char       *get_fcc_based_on_to PROTO((ADDRESS *));
  2062. char       *get_fcc_from_addr PROTO((ADDRESS *, char *));
  2063. char       *get_nickname_from_addr PROTO((ADDRESS *, char *));
  2064. void        set_last_fcc PROTO((char *));
  2065.  
  2066. /*-- adrbklib.c --*/
  2067. int        percent_abook_saved PROTO((void));
  2068.  
  2069. /*-- args.c --*/
  2070. char        *pine_args PROTO((struct pine *, int, char **, char ***));
  2071.  
  2072. /*--- filter.c ---*/
  2073. STORE_S       *so_get PROTO((SourceType, char *, int));
  2074. void        so_give PROTO((STORE_S **));
  2075. int        so_seek PROTO((STORE_S *, long, int));
  2076. int        so_truncate PROTO((STORE_S *, long));
  2077. int        so_release PROTO((STORE_S *));
  2078. void       *so_text PROTO((STORE_S *));
  2079. void        gf_filter_init PROTO((void));
  2080. char       *gf_pipe PROTO((gf_io_t, gf_io_t));
  2081. long        gf_bytes_piped PROTO(());
  2082. char       *gf_filter PROTO((char *, char *, STORE_S *, gf_io_t, filter_t *));
  2083. void        gf_set_so_readc PROTO((gf_io_t *, STORE_S *));
  2084. void        gf_set_so_writec PROTO((gf_io_t *, STORE_S *));
  2085. void        gf_set_readc PROTO((gf_io_t *, void *, unsigned long, SourceType));
  2086. void        gf_set_writec PROTO((gf_io_t *, void *, unsigned long, \
  2087.                  SourceType));
  2088. int        gf_puts PROTO((char *, gf_io_t));
  2089. void        gf_set_terminal PROTO((gf_io_t));
  2090. void        gf_binary_b64 PROTO((FILTER_S *, int));
  2091. void        gf_b64_binary PROTO((FILTER_S *, int));
  2092. void        gf_qp_8bit PROTO((FILTER_S *, int));
  2093. void        gf_8bit_qp PROTO((FILTER_S *, int));
  2094. void        gf_rich2plain PROTO((FILTER_S *, int));
  2095. void        gf_rich2plain_opt PROTO((int));
  2096. void        gf_enriched2plain PROTO((FILTER_S *, int));
  2097. void        gf_enriched2plain_opt PROTO((int));
  2098. void        gf_html2plain PROTO((FILTER_S *, int));
  2099. void        gf_escape_filter PROTO((FILTER_S *, int));
  2100. void        gf_control_filter PROTO((FILTER_S *, int));
  2101. void        gf_wrap PROTO((FILTER_S *, int));
  2102. void        gf_wrap_filter_opt PROTO((int));
  2103. void        gf_delete_trail_space PROTO((FILTER_S *, int));
  2104. void        gf_busy PROTO((FILTER_S *, int));
  2105. void        gf_nvtnl_local PROTO((FILTER_S *, int));
  2106. void        gf_local_nvtnl PROTO((FILTER_S *, int));
  2107. void        gf_line_test PROTO((FILTER_S *, int));
  2108. void        gf_line_test_opt PROTO((int (*) PROTO((long, char *))));
  2109. void        gf_prefix PROTO((FILTER_S *, int));
  2110. void        gf_prefix_opt PROTO((char *));
  2111. #if defined(DOS) || defined(OS2)
  2112. void        gf_translate PROTO((FILTER_S *, int));
  2113. void        gf_translate_opt PROTO((unsigned char *, unsigned));
  2114. #endif
  2115.  
  2116. /*--- folder.c ---*/
  2117. void        folder_screen PROTO((struct pine *));
  2118. char       *folders_for_fcc PROTO((char **));
  2119. int        folder_lister PROTO((struct pine *, FolderFun, CONTEXT_S *, \
  2120.              CONTEXT_S **, char *, char ***, CONTEXT_S *, void *));
  2121. #ifdef    NEWBB
  2122. void        mark_folder_as_new PROTO((char *));
  2123. #endif
  2124. char       *pretty_fn PROTO((char *));
  2125. int        folder_exists PROTO((char *, char *));
  2126. int        folder_create PROTO((char *, CONTEXT_S *));
  2127. int        folder_complete PROTO((CONTEXT_S *, char *));
  2128. void        init_folders PROTO((struct pine *));
  2129. CONTEXT_S  *new_context PROTO((char *));
  2130. void        free_folders PROTO(());
  2131. void        free_context PROTO((CONTEXT_S **));
  2132. void       *find_folders PROTO((char *, char *));
  2133. void        find_folders_in_context PROTO((MAILSTREAM **, CONTEXT_S *,char *));
  2134. CONTEXT_S  *default_save_context PROTO((CONTEXT_S *));
  2135. FOLDER_S   *folder_entry PROTO((int, void *));
  2136. FOLDER_S   *new_folder PROTO((char *));
  2137. int        folder_insert PROTO((int, FOLDER_S *, void *));
  2138. int        folder_index PROTO((char *, void *));
  2139. char       *folder_is_nick PROTO((char *, void *));
  2140. char       *next_folder PROTO((MAILSTREAM **, char *, char *,CONTEXT_S *,int));
  2141. void        init_inbox_mapping PROTO((char *, CONTEXT_S *));
  2142. char       *context_string PROTO((char *));
  2143. int        news_build PROTO((char *, char **, char **, BUILDER_ARG *));
  2144. char       *news_group_selector PROTO((char **));
  2145. void        free_newsgrp_cache PROTO(());
  2146.  
  2147. /*-- help.c --*/
  2148. #if defined(DOS) || defined(HELPFILE)
  2149. void        helper PROTO((short, char *title, int)); 
  2150. char      **get_help_text PROTO((short, int *lines)); 
  2151. #else
  2152. void        helper PROTO((char *text[], char *title, int)); 
  2153. #endif
  2154. void        print_all_help PROTO((void));
  2155. void        review_messages PROTO((char *));
  2156. void        add_review_message PROTO((char *));
  2157. void        end_status_review PROTO((void));
  2158.  
  2159. /*-- imap.c --*/
  2160. char       *cached_user_name PROTO((char *));
  2161. void        imap_flush_passwd_cache PROTO(());
  2162. long        pine_tcptimeout PROTO((long));
  2163.  
  2164. /*-- init.c --*/
  2165. void        init_vars PROTO((struct pine *));
  2166. void        free_vars PROTO((struct pine *));
  2167. char       *expand_variables PROTO((char *, char *));
  2168. void        set_current_val PROTO((struct variable *, int, int));
  2169. void        set_feature_list_current_val PROTO((struct variable *));
  2170. int        init_username PROTO((struct pine *));
  2171. int        init_hostname PROTO((struct pine *));  
  2172. int        write_pinerc PROTO((struct pine *));
  2173. int        var_in_pinerc PROTO((char *));
  2174. void        free_pinerc_lines PROTO((void));
  2175. void        dump_global_conf PROTO((void));
  2176. void        dump_new_pinerc PROTO((char *));
  2177. int        set_variable PROTO((int, char *, int));
  2178. int        set_variable_list PROTO((int, char **));
  2179. int        init_mail_dir PROTO((struct pine *));
  2180. void        init_save_defaults PROTO(());
  2181. int        expire_sent_mail PROTO((void));
  2182. char      **parse_list PROTO((char *, int, char **));
  2183. NAMEVAL_S  *feature_list PROTO((int));
  2184. NAMEVAL_S  *save_msg_rules PROTO((int));
  2185. NAMEVAL_S  *fcc_rules PROTO((int));
  2186. NAMEVAL_S  *ab_sort_rules PROTO((int));
  2187. NAMEVAL_S  *goto_rules PROTO((int));
  2188. void        set_old_growth_bits PROTO((struct pine *, int));
  2189. int        test_old_growth_bits PROTO((struct pine *, int));
  2190. void        dump_config PROTO((struct pine *, gf_io_t));
  2191. void        dump_pine_struct PROTO((struct pine *, gf_io_t));
  2192.  
  2193. /*---- mailcap.c ----*/
  2194. char       *mailcap_build_command PROTO((BODY *, char *, int *));
  2195. int        mailcap_can_display PROTO((int, char *, PARAMETER *));
  2196. void        mailcap_free PROTO((void));
  2197. int        set_mime_type_by_extension PROTO((BODY *, char *));
  2198.  
  2199. /*---- mailcmd.c ----*/
  2200. int        process_cmd PROTO((struct pine *, MSGNO_S *, int, int,int,int *));
  2201. void        bogus_command PROTO((int, char *));
  2202. char       *broach_folder PROTO((int, int, CONTEXT_S **));
  2203. int        do_broach_folder PROTO((char *, CONTEXT_S *));
  2204. void        visit_folder PROTO((struct pine *, char *, CONTEXT_S *));
  2205. void        expunge_and_close PROTO((MAILSTREAM *, CONTEXT_S *, char *,
  2206.                      char **));
  2207. char       *get_uname PROTO((char *, char *, int));
  2208. char       *build_updown_cmd PROTO((char *, char *, char *, char*));
  2209. int        file_lister PROTO((char *, char *, char *, int, int));
  2210.  
  2211. /*--- mailindx.c ---*/
  2212. void        mail_index_screen PROTO((struct pine *));
  2213. int        index_lister PROTO((struct pine *, CONTEXT_S *, char *, \
  2214.                 MAILSTREAM *, MSGNO_S *));
  2215. void        clear_index_cache PROTO((void));
  2216. void        clear_index_cache_ent PROTO((long));
  2217. int        build_index_cache PROTO((long));
  2218. #ifdef    DOS
  2219. void        flush_index_cache PROTO((void));
  2220. #endif
  2221. HLINE_S       *build_header_line PROTO((struct pine *, MAILSTREAM *,
  2222.                      MSGNO_S *, long));
  2223. void        init_index_format PROTO((char *, INDEX_COL_S **));
  2224. void        build_header_cache PROTO((void));
  2225. void        redraw_index_body PROTO((void));
  2226. void        do_index_border PROTO((CONTEXT_S *, char *, MAILSTREAM *, \
  2227.                    MSGNO_S *, IndexType, int *, int));
  2228. char       *sort_name PROTO((SortOrder));
  2229. void        sort_current_folder PROTO((int, SortOrder, int));
  2230. int        percent_sorted PROTO((void));
  2231. void        msgno_init PROTO((MSGNO_S **, long));
  2232. void        msgno_add_raw PROTO((MSGNO_S *, long));
  2233. void        msgno_flush_raw PROTO((MSGNO_S *, long));
  2234. int        msgno_in_select PROTO((MSGNO_S *, long));
  2235. long        msgno_in_sort PROTO((MSGNO_S *, long));
  2236. void        msgno_inc PROTO((MAILSTREAM *, MSGNO_S *));
  2237. void        msgno_dec PROTO((MAILSTREAM *, MSGNO_S *));
  2238. void        msgno_include PROTO((MAILSTREAM *, MSGNO_S *));
  2239. void        msgno_exclude PROTO((MAILSTREAM *, MSGNO_S *));
  2240.  
  2241. /*---- mailpart.c ----*/
  2242. void        attachment_screen PROTO((struct pine *, MSGNO_S *));
  2243. char       *detach PROTO((MAILSTREAM *, long, BODY *, char *, long *, \
  2244.               gf_io_t, filter_t *));
  2245. void        save_attachment PROTO((int, long, ATTACH_S *));
  2246. void        pipe_attachment PROTO((long, ATTACH_S *));
  2247. char       *expand_filter_tokens PROTO((char *, ENVELOPE *, char **, char **,
  2248.                     int *));
  2249. char       *filter_session_key PROTO(());
  2250. char       *filter_data_file PROTO((int));
  2251.  
  2252. /*--- mailview.c ---*/
  2253. void        mail_view_screen PROTO((struct pine *));
  2254. void        scrolltool PROTO((void *, char *, TextType, SourceType, \
  2255.                   ATTACH_S *));
  2256. char       *body_type_names PROTO((int));
  2257. char       *type_desc PROTO((int, char *, PARAMETER *, int));
  2258. int        format_message PROTO((long, ENVELOPE *, BODY *, int, gf_io_t));
  2259. int        match_escapes PROTO((char *));
  2260. int        decode_text PROTO((ATTACH_S *, long, gf_io_t, DetachErrStyle,int));
  2261. char       *display_parameters PROTO((PARAMETER *));
  2262. void        display_output_file PROTO((char *, char *, char *));
  2263. char       *xmail_fetchheader_lines PROTO((MAILSTREAM *, long, char **));
  2264. char       *xmail_fetchheader_lines_not PROTO((MAILSTREAM *, long, char **));
  2265. int        format_header_text PROTO((MAILSTREAM *, long, ENVELOPE *,
  2266.                       HEADER_S *, gf_io_t, char *));
  2267. void        format_envelope PROTO((MAILSTREAM *, long, ENVELOPE *, gf_io_t,
  2268.                    long, char *));
  2269.  
  2270. /*--newmail.c --*/
  2271. long        new_mail PROTO((int, int, int));
  2272. int        check_point PROTO((CheckPointTime));
  2273. void        check_point_change PROTO(());
  2274. void        reset_check_point PROTO((void));
  2275. void        zero_new_mail_count PROTO((void));
  2276.  
  2277. /*-- os.c --*/
  2278. int        can_access PROTO((char *, int));
  2279. long        name_file_size PROTO((char *));
  2280. long        fp_file_size PROTO((FILE *));
  2281. time_t        name_file_mtime PROTO((char *));
  2282. time_t        fp_file_mtime PROTO((FILE *));
  2283. void        file_attrib_copy PROTO((char *, char *));
  2284. int        is_writable_dir PROTO((char *));
  2285. int        create_mail_dir PROTO((char *));
  2286. int        rename_file PROTO((char *, char *));
  2287. void        build_path PROTO((char *, char *, char *));
  2288. int        is_absolute_path PROTO((char *));
  2289. char       *last_cmpnt PROTO((char *));
  2290. int        expand_foldername PROTO((char *));
  2291. char       *fnexpand PROTO((char *, int));
  2292. char       *filter_filename PROTO((char *));
  2293. int        cntxt_allowed PROTO((char *));
  2294. long        disk_quota PROTO((char *, int *));
  2295. char       *read_file PROTO((char *));
  2296. FILE       *create_tmpfile PROTO((void));
  2297. char       *temp_nam PROTO((char *, char *));
  2298. void        coredump PROTO((void));
  2299. void        getdomainnames PROTO((char *, int, char *, int));
  2300. int        have_job_control PROTO((void));
  2301. int         stop_process PROTO((void));
  2302. char       *error_description PROTO((int));
  2303. void        get_user_info PROTO((struct user_info *));
  2304. char       *local_name_lookup PROTO((char *));
  2305. int        change_passwd PROTO((void));
  2306. int        mime_can_display PROTO((int, char *, PARAMETER *, int *));
  2307. char       *canonical_name PROTO((char *));
  2308. PIPE_S       *open_system_pipe PROTO((char *, char **, char **, int));
  2309. int        close_system_pipe PROTO((PIPE_S **));
  2310. char       *smtp_command PROTO((char *));
  2311. int        mta_handoff PROTO((METAENV *, BODY *, char *));
  2312. char       *post_handoff PROTO((METAENV *, BODY *, char *));
  2313. void        exec_mailcap_cmd PROTO((char *, char *, int));
  2314. int        exec_mailcap_test_cmd PROTO((char *));
  2315. #ifdef DEBUG
  2316. void        init_debug PROTO((void));
  2317. void        save_debug_on_crash PROTO((FILE *));
  2318. int        do_debug PROTO((FILE *));
  2319. #endif
  2320. #ifdef    DOS
  2321. void       *dos_cache PROTO((MAILSTREAM *, long, long));
  2322. char       *dos_gets PROTO((readfn_t, void *, unsigned long));
  2323. #endif
  2324. #ifdef    _WINDOWS
  2325. void        scroll_setrange PROTO((long max));
  2326. void        scroll_setpos PROTO((long pos));
  2327. long        scroll_getpos PROTO((void));
  2328. long        scroll_getscrollto PROTO((void));
  2329. #endif
  2330. #ifdef    MOUSE
  2331. unsigned long mouse_in_main PROTO((int, int, int));
  2332. #endif
  2333.  
  2334. /*--- other.c ---*/
  2335. int        lock_keyboard PROTO((void));
  2336. void        signature_edit PROTO((char *));
  2337. void        redraw_kl_body PROTO(());
  2338. void        redraw_klocked_body PROTO(());
  2339. void        gripe PROTO((struct pine *));
  2340. void        option_screen PROTO((struct pine *));
  2341. void        flag_maintenance_screen PROTO((struct pine *,
  2342.                        struct flag_screen *));
  2343. void        parse_printer PROTO ((char *, char **, char **, char **,
  2344.                   char **, char **, char **));
  2345. #ifndef DOS
  2346. void        select_printer PROTO((struct pine *));
  2347. #endif
  2348.  
  2349. /*-- pine.c --*/
  2350. void        main_menu_screen PROTO((struct pine *));
  2351. void        show_main_screen PROTO((struct pine *, int, OtherMenu, \
  2352.                     struct key_menu *, int, Pos *));
  2353. void        news_screen PROTO((struct pine *));
  2354. void        quit_screen PROTO((struct pine *));
  2355. long        count_flagged PROTO((MAILSTREAM *, char *));
  2356. void        panic PROTO((char *));
  2357. void        panic1 PROTO((char *, char *));
  2358. MAILSTREAM *same_stream PROTO((char *, MAILSTREAM *));
  2359. MsgNo        first_sorted_flagged PROTO((unsigned long, MAILSTREAM *));
  2360. MsgNo        next_sorted_flagged PROTO((unsigned long, MAILSTREAM *, \
  2361.                        long, int *));
  2362. long        any_lflagged PROTO((MSGNO_S *, int));
  2363. void        dec_lflagged PROTO((MSGNO_S *, int, long));
  2364. int        get_lflag PROTO((MAILSTREAM *, MSGNO_S *, long, int));
  2365. int        set_lflag PROTO((MAILSTREAM *, MSGNO_S *, long, int, int));
  2366. void        warn_other_cmds PROTO(());
  2367. unsigned long pine_gets_bytes PROTO((int));
  2368.  
  2369. /*-- print.c --*/
  2370. int        open_printer PROTO((char *));
  2371. void        close_printer PROTO((void));
  2372. int        print_char PROTO((int));
  2373. void        print_text PROTO((char *));
  2374. void        print_text1 PROTO((char *, char *));
  2375. void        print_text2 PROTO((char *, char *, char *));
  2376. void        print_text3 PROTO((char *, char *, char *, char *));
  2377.      
  2378. /*-- reply.c --*/
  2379. void        reply PROTO((struct pine *));
  2380. void        reply_delimiter PROTO((ENVELOPE *, gf_io_t));
  2381. char       *reply_quote_str PROTO((ENVELOPE *, int));
  2382. void        forward PROTO((struct pine *));
  2383. void        bounce PROTO((struct pine *));
  2384. void        forward_text PROTO((struct pine *, void *, SourceType));
  2385. char       *generate_message_id PROTO((struct pine *));
  2386. ADDRESS    *first_addr PROTO((ADDRESS *));
  2387. char       *get_signature PROTO(());
  2388. char       *signature_path PROTO((char *, char *, size_t));
  2389. ENVELOPE   *copy_envelope PROTO((ENVELOPE *));
  2390. BODY       *copy_body PROTO((BODY *, BODY *));
  2391. PARAMETER  *copy_parameters PROTO((PARAMETER *));
  2392. int        get_body_part_text PROTO((MAILSTREAM *, BODY *, long, char *, \
  2393.                       gf_io_t, char *, char *));
  2394. char       *partno PROTO((BODY *, BODY *));
  2395.  
  2396. /*-- screen.c --*/
  2397. void        format_keymenu PROTO((struct key_menu *, bitmap_t, int, \
  2398.                   OtherMenu, int));
  2399. void        draw_keymenu PROTO((struct key_menu *, bitmap_t, int, int, \
  2400.                 int, OtherMenu, int));
  2401. void        blank_keymenu PROTO((int, int));
  2402. void        draw_cancel_keymenu PROTO((void));
  2403. void        redraw_keymenu PROTO((void));
  2404. void        mark_keymenu_dirty PROTO((void));
  2405. void        mark_titlebar_dirty PROTO((void));
  2406. char       *status_string PROTO((MAILSTREAM *, MESSAGECACHE *));
  2407. char       *set_titlebar PROTO((char *, MAILSTREAM *, CONTEXT_S *, char *, \
  2408.                 MSGNO_S *, int, TitleBarType, long, long));
  2409. void        push_titlebar_state PROTO(());
  2410. void        pop_titlebar_state PROTO(());
  2411. void        redraw_titlebar PROTO((void));
  2412. void        update_titlebar_message PROTO((MSGNO_S *));
  2413. void        update_titlebar_percent PROTO((long));
  2414. void        update_titlebar_lpercent PROTO((long));
  2415. void        update_titlebar_page PROTO((int));
  2416. int        update_titlebar_status PROTO((MESSAGECACHE *));
  2417. void        clearfooter PROTO((struct pine *));
  2418. void        end_titlebar PROTO((void));
  2419. void        end_keymenu PROTO((void));
  2420.  
  2421. /*-- send.c --*/
  2422. void        compose_screen PROTO((struct pine *)); 
  2423. void        compose_mail PROTO((char *, char *, gf_io_t));
  2424. void        pine_send PROTO((ENVELOPE *, BODY **, char *, char *, \
  2425.                  long *, char *, char *, char *, void *, int));
  2426. int        pine_simple_send PROTO((ENVELOPE *, BODY **, char *, char **, int));
  2427. void        phone_home PROTO(());
  2428. void        pine_free_body PROTO((BODY **));
  2429. void        simple_header_parse PROTO((char *, char **, char **));
  2430. int        valid_subject PROTO((char *, char **, char **, BUILDER_ARG *));
  2431. long        flags_for_pico PROTO((struct pine *));
  2432. long        new_mail_for_pico PROTO((int, int));
  2433. int        display_message_for_pico PROTO((int));
  2434. int        upload_msg_to_pico PROTO((char *, long *));
  2435. char       *checkpoint_dir_for_pico PROTO((char *, int));
  2436. void        set_mime_type_by_grope PROTO((BODY *));
  2437. void        resize_for_pico PROTO(());
  2438.  
  2439. /*-- signals.c --*/
  2440. int        busy_alarm PROTO((unsigned, char *, percent_done_t, int));
  2441. void        suspend_busy_alarm PROTO((void));
  2442. void        resume_busy_alarm PROTO((void));
  2443. void        cancel_busy_alarm PROTO((int)); 
  2444. void        fake_alarm_blip PROTO((void));
  2445. void        init_signals PROTO((void));
  2446. void        init_sigwinch PROTO((void));
  2447. int        do_suspend PROTO((struct pine *));
  2448. void        fix_windsize PROTO((struct pine *));
  2449. void        end_signals PROTO((int));
  2450. SigType        hup_signal PROTO(());
  2451. SigType        term_signal PROTO(());
  2452. SigType        child_signal PROTO(());
  2453. void        intr_allow PROTO((void));
  2454. void        intr_disallow PROTO((void));
  2455. void        intr_handling_on PROTO((void));
  2456. void        intr_handling_off PROTO((void));
  2457.  
  2458. /*-- status.c --*/
  2459. int        display_message PROTO((int));
  2460. void        d_q_status_message PROTO((void));
  2461. void        q_status_message PROTO(( int, int, int, char *));
  2462. void        q_status_message1 PROTO((int, int, int, char *, void *));
  2463. void        q_status_message2 PROTO((int, int, int, char *, void *, void *));
  2464. void        q_status_message3 PROTO((int, int, int, char *, void *, void *, \
  2465.                      void *));
  2466. void        q_status_message4 PROTO((int, int, int, char *, void *, void *, \
  2467.                      void *, void *));
  2468. void        q_status_message7 PROTO((int, int, int, char *, void *, void *, \
  2469.                      void *, void *, void *, void *, void *));
  2470. int        messages_queued PROTO((long *));
  2471. int        status_message_write PROTO((char *, int));
  2472. void        flush_status_messages PROTO((int));
  2473. void        flush_ordered_messages PROTO((void));
  2474. void        mark_status_dirty PROTO((void));
  2475. void        mark_status_unknown PROTO((void));
  2476. int        want_to PROTO((char *, int, int, HelpType, int, int));
  2477. int        one_try_want_to PROTO((char *, int, int, HelpType, int, int));
  2478. int        radio_buttons PROTO((char *, int, ESCKEY_S *, int, int, HelpType,
  2479.                  int));
  2480.  
  2481. /*-- strings.c --*/
  2482. char       *rplstr PROTO((char *, int, char *));
  2483. void        sqzspaces PROTO((char *));
  2484. void        sqznewlines PROTO((char *));
  2485. void        removing_trailing_white_space PROTO((char *));
  2486. void        removing_leading_white_space PROTO((char *));
  2487. char       *removing_quotes PROTO((char *));
  2488. char       *strclean PROTO((char *));
  2489. int        strucmp PROTO((char *, char *));
  2490. int        struncmp PROTO((char *, char *, int));
  2491. int        in_dir PROTO((char *, char *));
  2492. char       *srchstr PROTO((char *, char *));
  2493. char       *strindex PROTO((char *, int));
  2494. char       *strrindex PROTO((char *, int));
  2495. void        sstrcpy PROTO((char **, char *));
  2496. char       *month_abbrev PROTO((int));
  2497. char       *week_abbrev PROTO((int));
  2498. int        month_num PROTO((char *));
  2499. void        parse_date PROTO((char *, struct date *));
  2500. int        compare_dates PROTO((MESSAGECACHE *, MESSAGECACHE *));
  2501. void        convert_to_gmt PROTO((MESSAGECACHE *));
  2502. char       *pretty_command PROTO((int));
  2503. char       *repeat_char PROTO((int, int));
  2504. char       *comatose PROTO((long));
  2505. char       *byte_string PROTO((long));
  2506. char       *enth_string PROTO((int));
  2507. char       *long2string PROTO((long));
  2508. char       *int2string PROTO((int));
  2509. void        get_pair PROTO((char *, char **, char **, int));
  2510. int        read_hex PROTO((char *));
  2511. char       *string_to_cstring PROTO((char *));
  2512. char       *cstring_to_hexstring PROTO((char *));
  2513. char       *bitstrip PROTO((char *));
  2514. unsigned char *rfc1522_decode PROTO((unsigned char *, char *, char **));
  2515. char       *rfc1522_encode PROTO((char *, unsigned char *, char *));
  2516.  
  2517. /*-- ttyin.c--*/
  2518. int        read_char PROTO((int));
  2519. int        read_command PROTO(());
  2520. int        optionally_enter PROTO((char *, int, int, int, int, int, char *, \
  2521.                     ESCKEY_S *, HelpType, unsigned));
  2522. int        init_tty_driver PROTO((struct pine *));
  2523. void        tty_chmod PROTO((struct pine *, int, int));
  2524. void        setup_dflt_esc_seq PROTO((KBESC_T **));
  2525. void        end_tty_driver PROTO((struct pine *));
  2526. int        Raw PROTO((int));
  2527. void        xonxoff_proc PROTO((int));
  2528. void        crlf_proc PROTO((int));
  2529. void        intr_proc PROTO((int));
  2530. void        flush_input PROTO(());
  2531. void        end_keyboard PROTO((int));
  2532. void        init_keyboard PROTO((int));
  2533. int        validatekeys PROTO((int));
  2534. int        key_recorder PROTO((int, int));
  2535.  
  2536. /*-- ttyout.c --*/
  2537. int        get_windsize PROTO((struct ttyo *));
  2538. int        BeginScroll PROTO((int, int));
  2539. void        EndScroll PROTO((void));
  2540. int        ScrollRegion PROTO(( int));
  2541. int        Writechar PROTO((unsigned int, int));
  2542. void        Write_to_screen PROTO((char *));
  2543. void        PutLine0 PROTO((int, int, char *));
  2544. void        PutLine0n8b PROTO((int, int, char *, int));
  2545. void        PutLine1 PROTO((int, int, char *, void *));
  2546. void        PutLine2 PROTO((int, int, char *, void *, void *));
  2547. void        PutLine3 PROTO((int, int, char *, void *, void *, void *));
  2548. void        PutLine4 PROTO((int, int, char *, void *, void *, void *, void *));
  2549. void        PutLine5 PROTO((int, int, char *, void *, void *, void *, void *, \
  2550.                 void *));
  2551. void        CleartoEOLN PROTO((void));
  2552. int        CleartoEOS PROTO((void));
  2553. void        ClearScreen PROTO((void));
  2554. void        ClearLine PROTO((int));
  2555. void        ClearLines PROTO((int, int));
  2556. void        MoveCursor PROTO((int, int));
  2557. void        NewLine PROTO((void));
  2558. int        StartInverse PROTO((void));
  2559. void        EndInverse PROTO((void));
  2560. int        InverseState PROTO((void));
  2561. int        StartUnderline PROTO((void));
  2562. void        EndUnderline PROTO((void));
  2563. int        StartBold PROTO((void));
  2564. void        EndBold PROTO((void));
  2565. int        config_screen PROTO((struct ttyo **, KBESC_T **));
  2566. void        init_screen PROTO((void));
  2567. void        end_screen PROTO((char *));
  2568. void        outchar PROTO((int));
  2569. void        icon_text PROTO((char *));
  2570. void        clear_cursor_pos PROTO((void));
  2571. int        InsertChar PROTO((int));
  2572. int        DeleteChar PROTO((int));
  2573.  
  2574. #define SCREEN_FUN_NULL ((void (*) PROTO((void *)))NULL)
  2575.  
  2576. #endif /* _PINE_INCLUDED */
  2577.